写了个图片放大效果,

sohighthesky 2009-11-15 02:47:11

演示:http://www.cnblogs.com/sohighthesky/archive/2009/11/15/1603348.html

大家看看,顺序测试下,

源代码:

/*
*Author:sohighthesky
*From:http://www.cnblogs.com/sohighthesky/
*Date:2009-11-14
*/
/*
*img 指定要放大的图片或者其id
*options:参见代码中setOptions中的注释
*/
var imageZoom = function(img,options) {
this.img=this.g(img);
if(this.img.nodeName!="IMG") {
if(this.img && this.img.children[0].nodeName=="IMG")this.img=this.img.children[0];
else throw Error("Invalid argument [img]!");
}
this.setOptions(options);
this.init();
}
imageZoom.prototype={
g:function(id) {return typeof(id)=="string"?document.getElementById(id):id;},
ae:function(el,type,call) {
if(el.addEventListener)el.addEventListener(type,call,false);
else el.attachEvent("on"+type,call);
},
getPos:function(o){//取元素坐标
var x = 0, y = 0;
do{x += o.offsetLeft; y += o.offsetTop;}
while(o=o.offsetParent);
return {'x':x,'y':y};
},
setOptions:function(options) {
this.options={
mul:0,//默认为不放大(显示图片的原来大小)
bigImg:null,//指定放大的图片路径(要跟小图成比例才好)
viewer:null, //指定显示的位置(可以为一个div或者其id)
viewerMul:1//指定显示div的放大倍数,默认为原大小,设置viewer时此参数无效
};
for(var o in options) {this.options[o]=options[o];}
this.options.bigImg =this.options.bigImg ||this.img.src;
},
getSize:function(o) {
return {w:o.offsetWidth,h:o.offsetHeight};
},
createView:function() {
var _is=this.getSize(this.img);
var d=document;
if(this.options.viewer){
this.viewer=this.g(this.options.viewer);
this.viewer.style.overflow="hidden";
this.viewer.style.position="relative";
} else {
this.viewer=d.createElement("div");
var pos=this.getPos(this.img);
this.viewer.style.cssText="display:none;overflow:hidden;position:absolute;top:"+pos.y+"px;left:"+(pos.x+_is.w+10)+"px;height:"+_is.h*this.options.viewerMul+"px;width:"+_is.w*this.options.viewerMul+"px";
d.body.appendChild(this.viewer);
}
this.viewimg=d.createElement("img");
this.viewimg.style.cssText="position:relative;left:-33%;top:-33%;";
this.viewimg.src=this.options.bigImg;
if(this.options.mul) {//设置放大倍数
this.viewimg.style.width=_is.w*this.options.mul +"px";
this.viewimg.style.height=_is.h*this.options.mul +"px";
}
this.viewer.appendChild(this.viewimg);
},
move:function(e) {
if(!this.options.mul)
this.options.mul=this.viewimg.offsetHeight/this.img.offsetHeight;
var pos=this.getPos(this.img);
var l=e.clientX-pos.x+(document.documentElement.scrollLeft || document.body.scrollLeft);//鼠标位置相对于图片左上角的偏移
var t=e.clientY-pos.y+(document.documentElement.scrollTop || document.body.scrollTop);
var zs=this.getSize(this.viewer);
var pl=-l*this.options.mul+zs.w/2;
var pt=-t*this.options.mul+zs.h/2;
pl=pl>0?0:pl;
pt=pt>0?0:pt;

var vs=this.getSize(this.viewimg);
pl=Math.max(pl,zs.w-vs.w);
pt=Math.max(pt,zs.h-vs.h);

this.viewimg.style.left=pl+"px";
this.viewimg.style.top=pt+"px";
},
init:function() {
var o=this;
var load=function(a) {//图片加载
o.createView.call(o);
o.img.setAttribute("alt","");
o.ae(o.img,"mousemove",function(event){o.move.call(o,event);});
if(!o.options.viewer) {
o.ae(o.img,"mouseover",function(){o.viewer.style.display=""});
o.ae(o.img,"mouseout",function(){o.viewer.style.display="none"});
}
};
if(typeof(document.readyState)=="undefined" || window.opera) {
var de=document.documentElement || document.body;
var h=de.scrollHeight;
var t=setInterval(function() {
if(h==de.scrollHeight){
clearInterval(t);
load();
} else h=de.scrollHeight;
},500);
} else if(document.readyState=="complete")
load();
else
o.ae(window,"load",load);
}
};
...全文
238 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
三碗猪脚 2010-01-06
  • 打赏
  • 举报
回复
好东西,收下了!
sohighthesky 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 danica7773 的回复:]
引用 2 楼 click_me 的回复:
支持下
效果不错 女的稍微丑了点


晕。。。
[/Quote]
感谢你的建议
bufan2162 2009-11-17
  • 打赏
  • 举报
回复
效果不错。
CaoMei_Jenny 2009-11-17
  • 打赏
  • 举报
回复
学习一下,谢谢分享
ymqdcpy 2009-11-16
  • 打赏
  • 举报
回复
要是把鼠标样式变一下就更好了...

顶一下..
parss 2009-11-16
  • 打赏
  • 举报
回复
sohighthesky 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 click_me 的回复:]
支持下
效果不错 女的稍微丑了点
[/Quote]
你给来两张漂亮点的?

[Quote=引用 7 楼 ymqdcpy 的回复:]
要是把鼠标样式变一下就更好了...

顶一下..
[/Quote]
鼠标样式 改成什么样?
z1g2w3i4 2009-11-16
  • 打赏
  • 举报
回复
webwoool 2009-11-16
  • 打赏
  • 举报
回复
那个拿剑的MM好漂亮啊
daileihaha 2009-11-16
  • 打赏
  • 举报
回复
不错
itliyi 2009-11-16
  • 打赏
  • 举报
回复
xiaofan_sap 2009-11-16
  • 打赏
  • 举报
回复
good good study day day up
weihongluo 2009-11-16
  • 打赏
  • 举报
回复
很好,鼠标样式改改就更完美了。。。能换成QQ空间类似的就最好了,UP_______________________________________________________
qibao33 2009-11-15
  • 打赏
  • 举报
回复
学习
Jermaine 2009-11-15
  • 打赏
  • 举报
回复
友情支持下,关于图片展示之类的效果我倒是写过不少,也收藏了不少~
打字员 2009-11-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 click_me 的回复:]
支持下
效果不错 女的稍微丑了点
[/Quote]

晕。。。
fadfayger 2009-11-15
  • 打赏
  • 举报
回复
不错,要好好学习一下
Click_Me 2009-11-15
  • 打赏
  • 举报
回复
支持下
效果不错 女的稍微丑了点
草根醉秋意 2009-11-15
  • 打赏
  • 举报
回复

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧