模仿Bootstrap插件的放大镜插件

/**该插件的使用基于jQuery**/

var mymagnifier=function(opts){
opts = mymagnifier.prototype.extendObj(mymagnifier.prototype.defaults,opts);
mymagnifier.prototype.magnifier(opts);
}
/**默认参数块**/ 
mymagnifier.prototype.defaults = {
img:"img", 
bigimg:"bigs",
mark:"mark"
};

mymagnifier.prototype.magnifier=function(opts){
var img = document.getElementById(opts.img);
var bigimg = document.getElementById(opts.bigimg);
var mark = document.getElementById(opts.mark);
var magnifier=img.parentNode;
console.log(magnifier.className+"+"+magnifier.getBoundingClientRect().left+"+"+magnifier.getBoundingClientRect().top);
var x,y,l,t,L,T,mL,mT;
img.onmouseover=function(){
mark.style.display="block";
bigimg.style.display="block";
}
img.onmouseout=function(){
mark.style.display="none";
bigimg.style.display="none";
}
img.onmousemove=function(e){
//获取鼠标相对浏览器的坐标
x=e.clientX;
y=e.clientY;
//console.log("x"+x,"y"+y)
l=img.offsetLeft;
t=img.offsetTop;
mark.style.left=(x-l-mark.offsetWidth/2-magnifier.getBoundingClientRect().left)+'px';
mark.style.top=(y-t-mark.offsetHeight/2-magnifier.getBoundingClientRect().top)+'px';
// 移动区边界距离边界的距离
mL=mark.offsetLeft;
mT=mark.offsetTop;
//最小范围
/*console.log("mL"+mL,"mT"+mT)*/
if(mL<=0){
mark.style.left="0";
}
if(mT<=0){
mark.style.top="0"
}
// 最大范围
if(mL>=img.offsetWidth-mark.offsetWidth){
mark.style.left=img.offsetWidth-mark.offsetWidth+"px";
}
if(mT>=img.offsetHeight-mark.offsetHeight){
mark.style.top=img.offsetHeight-mark.offsetHeight+"px";
}
//显示区的宽高
L=bigimg.offsetWidth;
T=bigimg.offsetHeight;
// console.log(L,T);
//获取放大的倍数
bigimg.style.left="-"+(mL/(img.offsetWidth/L))+"px";
bigimg.style.top="-"+(mT/(img.offsetHeight/T))+"px";
// console.log(bigimg.style.left,bigimg.style.top)
}
}


//js继承
mymagnifier.prototype.cloneObj=function(oldObj) { //复制对象方法
if (typeof(oldObj) != 'object') return oldObj;
if (oldObj == null) return oldObj;
var newObj = new Object();
for (var i in oldObj)
newObj[i] = mymagnifier.prototype.cloneObj(oldObj[i]);
return newObj;
};
mymagnifier.prototype.extendObj=function() { //扩展对象
var args = arguments;
if (args.length < 2) return;
var temp = mymagnifier.prototype.cloneObj(args[0]); //调用复制对象方法
for (var n = 1; n < args.length; n++) {
for (var i in args[n]) {
temp[i] = args[n][i];
}
}
return temp;
}
HTMLElement.prototype.MYmagnifier = mymagnifier;
var magnifier_box=document.getElementsByClassName("magnifier");
for(var i=0;i<magnifier_box.length;i++){
magnifier_box[i].MYmagnifier();
}

 

转载于:https://www.cnblogs.com/cy2525/p/6506431.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值