完全兼容的 鼠标滚轴缩放图片

以前看到的都是用IE的zoom,所以非IE就不支持,昨天看到这个js中鼠标滚轮事件详解 ,于是完全兼容(IE6-8,FF,Chrome,Opera,Safari)的鼠标滚轴缩放图片效果今天就诞生了

 

默认最小缩放为原图片的50%

新窗口查看效果 

 

code如下: 

 

/*!
 *Author:sohighthesky
 *blog:http://www.cnblogs.com/sohighthesky
 *date:2010-2-4
 
*/
var zooming=function(e){
    e
=window.event ||e;
    
var o=this,data=e.wheelDelta || -e.detail*40,zoom,size;
    
if(!+'\v1'){//IE
        zoom = parseInt(o.style.zoom) || 100
        zoom 
+= data / 12;
        
if(zoom > zooming.min) 
            o.style.zoom 
= zoom + '%';
        e.returnValue
=false;
    }
else {
        size
=o.getAttribute("_zoomsize").split(",");
        zoom
=parseInt(o.getAttribute("_zoom")) ||100;
        zoom
+=data/12;
        if(zoom>zooming.min){
            o.setAttribute(
"_zoom",zoom);
            o.style.width
=size[0]*zoom/100+"px";
            o.style.height=size[1]*zoom/100+"px"
        }
        e.preventDefault();//阻止默认行为
        e.stopPropagation();//for Firefox3.6
    }
};
zooming.add
=function(obj,min){//第一个参数指定可以缩放的图片,min指定最小缩放的大小 ,default to 50
    zooming.min=min || 50;
    obj.onmousewheel
=zooming;
    
if(/Firefox/.test(navigator.userAgent))//if Firefox
        obj.addEventListener("DOMMouseScroll",zooming,false);
    
if(-[1,]){//if not IE
        obj.setAttribute("_zoomsize",obj.offsetWidth+","+obj.offsetHeight);
    }
};

window.onload
=function(){//放在onload中,否则非ie中会无法计算图片大小出错
    zooming.add(document.getElementById("testimg1"));
}

 


If you could provide any suggestions or comments for this article, it is always welcome.

posted @ 2010-02-04 14:02 sohighthesky 阅读(3389) 评论(23) 编辑 收藏

 回复 引用 查看   
#1楼 2010-02-04 14:25 Mangos      
如果下次换个美女就好了!!
 回复 引用 查看   
#2楼[楼主] 2010-02-04 14:26 sohighthesky      
@Mangos
你帮我找个吧

 回复 引用 查看   
#3楼 2010-02-04 15:06 周彬      
效果不错,收藏了
 回复 引用 查看   
#4楼 2010-02-04 15:38 Dominic Xu      
这个好像一直这么做哦,还是bz out了。
 回复 引用 查看   
#5楼 2010-02-04 16:25 mx1700      
Firefox 3.6 测试失败。是我浏览器问题还是?
 回复 引用 查看   
#6楼 2010-02-04 16:41 Sunny Peng      
无法滚动。
 回复 引用 查看   
#7楼[楼主] 2010-02-04 16:43 sohighthesky      
@Sunny Peng
看看页面是否加载完毕,因为是放在onload中的

 回复 引用 查看   
#8楼 2010-02-04 16:52 赵弟栋      
引用mx1700:Firefox 3.6 测试失败。是我浏览器问题还是?

的确是

 回复 引用 查看   
#9楼 2010-02-04 16:52 赵弟栋      
是火狐中国版3.6 不知道有影响不?
 回复 引用 查看   
#10楼 2010-02-04 16:53 mx1700      
@赵弟栋
我是国际版,依旧有问题

 回复 引用 查看   
#11楼[楼主] 2010-02-04 16:54 sohighthesky      
@赵弟栋
哦,应该不会的,
兄弟有时间的话可以帮忙测试下吧,暂时还不想升级到3.6,
上面新窗口里有全部代码

 回复 引用 查看   
#12楼[楼主] 2010-02-04 17:00 sohighthesky      
@mx1700
帮忙试下这句话在ff3.6下是什么?
alert(/a/[-1]=='a')

 回复 引用 查看   
#13楼 2010-02-04 17:03 mx1700      
@sohighthesky
false

 回复 引用 查看   
#14楼[楼主] 2010-02-04 17:05 sohighthesky      
@mx1700
谢谢,现在看看这个地址里在ff里能不能正常http://dl.dropbox.com/u/2555620/jquery/zooming.html

 回复 引用 查看   
#15楼 2010-02-04 17:07 mx1700      
@sohighthesky
可以放大缩小了,不过滚动条会动。

 回复 引用 查看   
#16楼[楼主] 2010-02-04 17:12 sohighthesky      
@mx1700
不是吧,莫非preventDefault不起作用?

 回复 引用 查看   
#17楼[楼主] 2010-02-04 17:20 sohighthesky      
@赵弟栋
FF3.6可以了,

哎,19L说的滚动问题就先不管了,等有机会用ff3.6的时候再说

 回复 引用 查看   
#18楼 2010-02-04 17:21 mx1700      
@sohighthesky
firefox 3.6 可以使用 e.stopPropagation(); 来阻止滚动。
把 e.stopPropagation() 加在 e.preventDefault() 之前就可以了。
测试有效

 回复 引用 查看   
#19楼[楼主] 2010-02-04 17:31 sohighthesky      
@mx1700
ok,Thank you very much!

 回复 引用 查看   
#20楼 2010-02-04 23:12 错觉沉沦      
很是帅气!
 回复 引用 查看   
#21楼 2010-07-24 11:13 落叶/pdz      
效果不错,不过应该可以指定一个div里的所有图片,而不需要单个指定图片ID会更好些吧?
 回复 引用 查看   
#22楼[楼主] 2010-07-24 11:29 sohighthesky      
@落叶/pdz
谢谢,这个当时只是为了实现效果而已,况且
只是加一个for循环而已啊

 回复 引用 查看   
#23楼 2011-04-18 17:52 lonelystarxing      
好文支持一个!