模仿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();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM