放大镜缩略图(布局+点击切换)

效果演示

 

基本布局

 样式美化

 //下边
               #leftBottom {
                  width: 400px;
                  margin-top: 5px;

                  a {
                     width: 10px;
                     height: 54px;
                     border: 1px solid #ccc;
                     background: #ebebeb;
                     text-align: center;
                     line-height: 54px;
                     float: left;

                     &:first-child {
                        margin-right: 4px;
                     }
                  }

                  #piclist {
                     width: 372px;
                     height: 56px;
                     float: left;
                     overflow: hidden;
                     position: relative;

                     ul {
                        white-space: nowrap;
                        position: absolute;
                        left: 0px;
                        transition: 0.5s;

                        li {
                           width: 50px;
                           height: 50px;
                           border: 1px solid #ccc;
                           padding: 2px;
                           margin-right: 20px;
                           display: inline-block;

                           img {
                              width: 50px;
                              height: 50px;
                           }
                        }
                     }
                  }
               }

JavaScript

1、动态渲染放大镜缩略图的数据

 //动态渲染放大镜缩略图的数据
   thumbnailData();
   function thumbnailData() {
      /**
       * 思路:
       * 1、先获取piclist元素下的ul
       * 2、在获取data.js文件下的goodData->imagessrc
       * 3、遍历数组,根据数组的长度来创建li元素
       * 4、让ul遍历追加li元素
       */

      //1.获取piclist下的ul
      var ul = document.querySelector('#wrapper #content .contentMain #center #left #leftBottom #piclist ul');

      //2.获取imagessrc数据
      var imagessrc = goodData.imagessrc;

      //3.遍历数组
      for (var i = 0; i < imagessrc.length; i++) {
         //4.创建li元素
         var newLi = document.createElement('li');

         //5.创建img元素
         var newImg = document.createElement('img');
         newImg.src = imagessrc[i].s;

         //6.让li追加img元素
         newLi.appendChild(newImg);

         //7.让ul追加li元素
         ul.appendChild(newLi);
      }
   }

2、点击缩略图的效果

thumbnailClick();
   function thumbnailClick() {
      /**
       * 思路:
       * 1、获取所有的li元素,并且循环发生点击事件
       * 2、点击缩略图需要确定其下标位置来找到对应小图路径和大图路径替换现有src的值
       */

      //1.获取所有的li元素
      var liNodes = document.querySelectorAll('#wrapper #content .contentMain #center #left #leftBottom #piclist ul li');

      var smallPic_img = document.querySelector('#wrapper #content .contentMain #center #left #leftTop #smallPic img');

      var imagessrc = goodData.imagessrc;

      //小图路径需要默认和imagessrc的第一个元素小图的路径是一致的
      smallPic_img.src = imagessrc[0].s;

      //2.循环点击这些li元素
      for (var i = 0; i < liNodes.length; i++) {
         //在点击事件之前,给每一个元素都添加上自定义的下标
         liNodes[i].index = i; /** 还可以通过setAttribute('index',i) */
         liNodes[i].onclick = function () {
            var idx = this.index; /** 事件函数中的this永远指向的是实际发生事件的目标源对象 */
            bigimgIndex = idx;

            //变换小图路径
            smallPic_img.src = imagessrc[idx].s;
         }
      }
   }

3、点击缩略图左右箭头的效果

 //点击缩略图左右箭头的效果
   thumbnailLeftRightClick();
   function thumbnailLeftRightClick() {
      /**
       * 思路:
       * 1、先获取左右两端的箭头按钮
       * 2、在获取可视的div以及ul元素和所有的li元素
       * 3、计算(发生起点、步长、总体运动的距离值)
       * 4、然后再发生点击事件
       */

      //1、获取箭头元素
      var prev = document.querySelector('#wrapper #content .contentMain #center #left #leftBottom a.prev');
      var next = document.querySelector('#wrapper #content .contentMain #center #left #leftBottom a.next');

      //2、获取可视的div以及ul元素和所有的li元素
      var ul = document.querySelector('#wrapper #content .contentMain #center #left #leftBottom #piclist ul');

      var liNodes = document.querySelectorAll('#wrapper #content .contentMain #center #left #leftBottom #piclist ul li');

      //3、计算

      //发生起点
      var start = 0;

      //步长
      var step = (liNodes[0].offsetWidth + 20) * 2;

      //总体运动的距离值 = ul的宽度 - div框的宽度 = (图片的总数 - div中显示的数量) * (li的宽度 + 20)
      var endPostion = (liNodes.length - 5) * (liNodes[0].offsetWidth + 20);

      //4、发生事件
      prev.onclick = function () {
         start -= step;
         if (start < 0) {
            start = 0;
         }
         ul.style.left = -start + "px";
      }

      next.onclick = function () {
         start += step;
         if (start > endPostion) {
            start = endPostion;
         }
         ul.style.left = -start + "px";
      }

   }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值