JS实现多图点击切换,鼠标移上放大

继 javascript 简单的图片放大效果(一) 之后,把这个效果完善了一下,支持多图轮流切换,如下:

创新互联公司是专业的平邑网站建设公司,平邑接单;提供网站制作、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行平邑网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

本次采用代码封装到一个对象的模式,和***次函数式写法不一下,这样更清晰,添加自定义属性更方便,全部代码如下:

大图的地址用自定义属性的方式显示在标签如

 
 
 

 
 
 
  1.     
  2.     图片放大实例
  3.     
  4.     
  5.         * {
  6.             margin: 0;
  7.             padding: 0;
  8.         }
  9.         #zoomWarp {
  10.             width: 1000px;
  11.             margin: 20px auto;
  12.             overflow: hidden;
  13.         }
  14.         #smallwarp {
  15.             position: relative;
  16.             border: 1px solid #000;
  17.             width: 300px;
  18.             height: 300px;
  19.             float: left;
  20.             overflow: hidden;
  21.         }
  22.         #minImg {
  23.             float: left;
  24.             display: inline;
  25.             margin-right: 5px;
  26.         }
  27.         #minImg li {
  28.             width: 70px;
  29.             height: 70px;
  30.             overflow: hidden;
  31.             background: #ccc;
  32.             margin-bottom: 5px;
  33.             border: 1px solid #333;
  34.             cursor: pointer;
  35.             list-style: none;
  36.         }
  37.         #minImg li.lastChild {
  38.             margin-bottom: 0;
  39.         }
  40.     
  41.     
  42.         
  43.         
  44.         
  45.         
  46.     
  47.     
  48.         
  49.     
  •     var zoomImg = function () {
  •         return {
  •             init:function (warpId, options) {
  •                 this.zoomWarp = VVG.$(warpId); //获取外层包裹层
  •                 var sWarp = options.smallWarp || 'smallwarp'; //小图包裹层ID
  •                 var smallWarp = this.smallWarp = VVG.$(sWarp); //获取小图包裹层
  •                 this.targetImg = VVG.$$('img', smallWarp)[0];  //获取放大的目标图片对象
  •                 thisthis.bigImgUrl = this.targetImg.getAttribute('zoom'); //从目标图片对象的自定义属性读取大图的URL
  •                 this.bindMove();
  •                 this.bindMinImg();
  •             },
  •             createMask:function () {
  •                 var mask = this.mask = document.createElement("div"); //创建MASK层
  •                 mask.id = "mask";
  •                 // 设置CSS
  •                 VVG.setStyleById(mask, {
  •                     "position":"absolute",
  •                     "z-index":100,
  •                     "display":"none",
  •                     "width":"100px",
  •                     "height":"100px",
  •                     "background":"#999",
  •                     "border":"1px solid #000",
  •                     "cursor":"crosshair",
  •                     "opacity":80,
  •                     "left":0,
  •                     "top":0
  •                 });
  •                 this.smallWarp.appendChild(mask); //添加MASK层
  •             },
  •             createBigDiv:function () {
  •                 var bigDiv = this.bigDiv = document.createElement("div"); //创建大图显示层
  •                 bigDiv.id = "big";
  •                 VVG.setStyleById(bigDiv, {
  •                     "float":"left",
  •                     "border":"1px solid #000",
  •                     "display":"none",
  •                     "width":"300px",
  •                     "height":"300px",
  •                     "overflow":"hidden",
  •                     "border-left":"none",
  •                     "position":"relative",
  •                     "z-index":"100"
  •                 });
  •                 // 创建大图
  •                 var bigImg = this.bigImg = document.createElement('img');
  •                 bigImg.setAttribute('src', this.bigImgUrl);
  •                 bigImg.id = 'bigImg';
  •                 bigImg.style.position = 'absolute';
  •                 bigDiv.appendChild(bigImg);
  •                 this.zoomWarp.appendChild(bigDiv); //添加大图显示层
  •             },
  •             show:function () { // 显示悬浮遮罩层和放大图片层
  •                 this.mask.style.display = 'block';
  •                 this.bigDiv.style.display = 'block';
  •             },
  •             hidden:function () { //隐藏层
  •                 this.mask.style.display = 'none';
  •                 this.bigDiv.style.display = 'none';
  •             },
  •             zoomIng:function (event) { //开始放大
  •                 this.show(); //显示
  •                 event = VVG.getEvent(event); //获取事件
  •                 var target = this.mask;
  •                 var maskW = target.offsetWidth;
  •                 var maskH = target.offsetHeight;
  •                 //console.log(maskW +':'+maskH);
  •                 var sTop = document.documentElement.scrollTop || document.body.scrollTop;
  •                 var mouseX = event.clientX;
  •                 var mouseY = event.clientY + sTop;
  •                 var smallX = this.smallWarp.offsetLeft;
  •                 var smallY = this.smallWarp.offsetTop;
  •                 var smallW = this.smallWarp.offsetWidth;
  •                 var smallH = this.smallWarp.offsetHeight;
  •                 //console.log('x=' + mouseX + ':y=' + mouseY + ':' + sTop + 'smallX:' + smallX);
  •                 target.style.left = (mouseX - smallX - maskW / 2 ) + "px";
  •                 target.style.top = (mouseY - smallY - maskH / 2 ) + "px";
  •                 //显示位置计算
  •                 if ((mouseX - smallX) < maskW / 2) {
  •                     target.style.left = "0px";
  •                 } else if ((mouseX - smallX) > (smallW - maskW + maskW / 2)) {
  •                     target.style.left = (smallW - maskW ) + "px";
  •                 }
  •                 if ((mouseY - smallY) < maskH / 2) {
  •                     target.style.top = "0px";
  •                 } else if ((mouseY - smallY) > (smallH - maskH + maskH / 2)) {
  •                     target.style.top = (smallH - maskH) + "px";
  •                 }
  •                 this.showBig(parseInt(target.style.left), parseInt(target.style.top));
  •             },
  •             showBig:function (left, top) {
  •                 left = Math.ceil(left * 3);
  •                 top = Math.ceil(top * 3);
  •                 this.bigImg.style.left = -left + "px";
  •                 this.bigImg.style.top = -top + "px";
  •             },
  •             bindMove:function () {
  •                 this.createMask();
  •                 this.createBigDiv();
  •                 VVG.bindEvent(this.smallWarp, 'mousemove', VVG.bindFunction(this, this.zoomIng));
  •                 VVG.bindEvent(this.smallWarp, 'mouseout', VVG.bindFunction(this, this.hidden));
  •             },
  •             // 以下是左侧小图鼠标放上去后右侧显示相应的大图
  •             bindMinImg:function () {
  •                 var minImgUl = VVG.$('minImg'); //获取左侧的UL
  •                 var minImgLis = VVG.$$('li', minImgUl); //获取左侧的li
  •                 var thisthisObj = this; //this 赋值
  •                 for (var i = 0, n = minImgLis.length; i < n; i++) {
  •                     var liImg = VVG.$$('img', minImgLis[i])[0];
  •                     var imgSrc = liImg.src;
  •                     var bImgSrc = liImg.getAttribute('zoom');
  •                     //以下闭包传值imgSrc,与bImgSrc,并绑定左侧迷你图点击事件
  •                     VVG.bindEvent(liImg, 'click', function (t,f) {
  •                         return function () {
  •                             thisObj.changeImg.call(thisObj,t,f); //此处调用changeImg方法
  •                         }
  •                     }(imgSrc,bImgSrc));
  •                 }
  •             },
  •             changeImg:function (imgSrc, bImgSrc) { //改变右边的图片地址
  •                 this.targetImg.src = imgSrc;
  •                 this.bigImg.setAttribute('src', bImgSrc);
  •             }
  •         }
  •     }();
  •     zoomImg.init('zoomWarp', {});
  • #p#

    VVG.base库代码:

     
     
     
    1. /*
    2.  *    简单JS库封装  By VVG
    3.  *    @namespace VVG
    4.  *    E-mail:mysheller@163.com    QQ:83816819
    5.  */
    6. if (!String.trim) {
    7.     String.prototype.trim = function () {
    8.         var reg = /^\s+|\s+$/g;
    9.         return this.replace(reg, '');
    10.     }
    11. }
    12. (function () {
    13.     // create namespace VVG
    14.     if (!window.VVG) {
    15.         window.VVG = {};
    16.     }
    17.     function isCompatible(other) {
    18.         // Use capability detection to check requirements
    19.         if (other === false || !Array.prototype.push || !Object.hasOwnProperty || !document.createElement || !document.getElementsByTagName) {
    20.             alert('你的浏览器不支持某些特性!');
    21.             return false;
    22.         }
    23.         return true;
    24.     }
    25.     window.VVG.isCompatible = isCompatible;
    26.     // getElementById function
    27.     function $() {
    28.         var elements = new Array();
    29.         for (var i = 0; i < arguments.length; i++) {
    30.             var element = arguments[i];
    31.             if (typeof element == 'string') {
    32.                 element = document.getElementById(element);
    33.             }
    34.             if (!element) {
    35.                 continue;
    36.             }
    37.             // 如果只有一个参数,则返回
    38.             if (arguments.length == 1) {
    39.                 return element;
    40.             }
    41.             // 多个参数的时候存为数组
    42.             elements.push(element);
    43.         }
    44.         // 返回数组
    45.         return elements;
    46.     }
    47.     window.VVG.$ = $;
    48.     // 获取Parent父元素下标签名为child 的 Tags
    49.     function $$(tag, parent) {
    50.         parentparent = parent || document;
    51.         return $(parent).getElementsByTagName(tag);
    52.     }
    53.     window.VVG.$$ = $$;
    54.     // getElementsByClassName
    55.     function $$$(str, parent, tag) {
    56.         //父节点存在
    57.         if (parent) {
    58.             parent = $(parent);
    59.         } else {
    60.             // 未传值时,父节点为body
    61.             parent = document;
    62.         }
    63.         // tagContent为节点类型,未传值时为all节点
    64.         tagtag = tag || '*';
    65.         // 在父节点查找子节点,建立空数组arr
    66.         var els = parent.getElementsByTagName(tag),
    67.             arr = [];
    68.         for (var i = 0, n = els.length; i < n; i++) {
    69.             // 查找每个节点下的classname,以空格分离为一个k数组
    70.             for (var j = 0, k = els[i].className.split(' '), l = k.length; j < 1; j++) {
    71.                 // 当K数组中有一个值与str值相等时,记住这个标签并推入arr数组
    72.                 if (k[j] == str) {
    73.                     arr.push(els[i]);
    74.                     break;
    75.                 }
    76.             }
    77.         }
    78.         // 返回数组
    79.         return arr;
    80.     }
    81.     window.VVG.$$$ = $$$;
    82.     window.VVG.getElementsByClassName = $$$;
    83.     // Event事件绑定:绑定type事件到element元素,触发func函数
    84.     function bindEvent(element, type, func) {
    85.         if (element.addEventListener) {
    86.             element.addEventListener(type, func, false); //false 表示冒泡
    87.         } else if (element.attachEvent) {
    88.             element.attachEvent('on' + type, func);
    89.         } else {
    90.             element['on' + type] = func;
    91.         }
    92.     }
    93.     window.VVG.bindEvent = bindEvent;
    94.     // 解除Event事件绑定
    95.     function unbindEvent(element, type, func) {
    96.         if (element.removeEventListener) {
    97.             element.removeEventListener(type, func, false);
    98.         } else if (element.detachEvent) {
    99.             element.detachEvent('on' + type, func);
    100.         } else {
    101.             element['on' + type] = null;
    102.         }
    103.     }
    104.     window.VVG.unbindEvent = unbindEvent;
    105.     // 获取事件
    106.     function getEvent(event) {
    107.         return event || window.event;
    108.     }
    109.     window.VVG.getEvent = getEvent;
    110.     // 获取事件目标
    111.     function getTarget(event) {
    112.         return event.target || event.srcElement;
    113.     }
    114.     window.VVG.getTarget = getTarget;
    115.     // 获取鼠标位于文档的坐标
    116.     function getMousePositionInPage(event) {
    117.         event = getEvent(event);
    118.         return {
    119.             'x':event.pageX || event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft),
    120.             'y':event.pageY || event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)
    121.         }
    122.     }
    123.     window.VVG.getMousePositionInPage = getMousePositionInPage;
    124.     // 停止事件冒泡
    125.     function stopPropagation(event) {
    126.         if (event.stopPropagation) {
    127.             event.stopPropagation();
    128.         } else {
    129.             event.cancelBubble = true;
    130.         }
    131.     }
    132.     window.VVG.stopPropagation = stopPropagation;
    133.     // 阻止默认事件
    134.     function preventDefault(event) {
    135.         if (event.preventDefault) {
    136.             event.preventDefault();
    137.         } else {
    138.             event.returnValue = false;
    139.         }
    140.     }
    141.     window.VVG.preventDefault = preventDefault;
    142.     //  apply从新定义函数的执行环境
    143.     function bindFunction(obj, func) {
    144.         return function () {
    145.             return func.apply(obj, arguments);
    146.         };
    147.     }
    148.     window.VVG.bindFunction = bindFunction;
    149.     // 设置透明度
    150.     function setOpacity(node, level) {
    151.         node = $(node);
    152.         if (document.all) {
    153.             node.style.filter = 'alpha(opacity=' + level + ')';
    154.         } else {
    155.             node.style.opacity = level / 100;
    156.         }
    157.     }
    158.     window.VVG.setOpacity = setOpacity;
    159.     // 获取可视窗口尺寸
    160.     function getWindowSize() {
    161.         var de = document.documentElement;
    162.         return {
    163.             'width':(
    164.                 window.innerWidth || (de && de.clientWidth) || document.body.clientWidth),
    165.             'height':(
    166.                 window.innerHeight || (de && de.clientHeight) || document.body.clientHeight)
    167.         }
    168.     }
    169.     window.VVG.getWindowSize = getWindowSize;
    170.     //  数字转化为千分位格式函数
    171.     function thousandsNumberFormat(str) {
    172.         var n = str.length;
    173.         var c = n % 3;
    174.         var reg = /\d{3}(?!$)/g;
    175.         if (n > 3) {
    176.             var strstr1 = str.slice(0, c);
    177.             var strstr2 = str.slice(c, n);
    178.             str1str1 = str1 ? str1 + ',' : '';
    179.             str = str1 + str2.replace(reg, function (p1) {
    180.                 return p1 + ',';
    181.             })
    182.         }
    183.         return str;
    184.     }
    185.     window.VVG.thousandsNumberFormat = thousandsNumberFormat;
    186.     // 带横杠的字符形式转化为驼峰式命名
    187.     function camelize(string) {
    188.         return string.replace(/-(\w)/g, function (strMatch, p1) {
    189.             return p1.toUpperCase();
    190.         });
    191.     }
    192.     window.VVG.camelize = camelize;
    193.     // 驼峰式转化为横杠分隔
    194.     function uncamelize(string, sep) {
    195.         sepsep = sep || '-';
    196.         return string.replace(/([a-z])([A-Z])/g, function (strMatch, p1, p2) {
    197.             return p1 + sep + p2.toLowerCase();
    198.         });
    199.     }
    200.     window.VVG.uncamelize = uncamelize;
    201.     // 设置根据ID设置样式
    202.     function setStyleById(element, cssjson) {
    203.         element = $(element);
    204.         for (property in cssjson) {
    205.             if (!cssjson.hasOwnProperty(property)) continue;
    206.             if

      当前文章:JS实现多图点击切换,鼠标移上放大
      当前路径:http://www.csdahua.cn/qtweb/news14/246314.html

      成都网站优化推广公司_创新互联,为您提供自适应网站网站制作定制开发网站导航电子商务ChatGPT

      广告

      声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网

    成都快上网为您推荐相关内容

    网站建设知识

    同城分类信息