Sfoglia il codice sorgente

携程网首页无缝滚动的轮播图

Cathy 4 anni fa
parent
commit
1c6c434208

+ 29 - 0
ctrip-mobile/css/index.css

@@ -77,7 +77,36 @@ a {
 }
 /* 焦点图 */
 .focus {
+  position: relative;
   padding-top: 44px;
+  overflow: hidden;
+}
+.focus ul {
+  width: 500%;
+  overflow: hidden;
+  margin-left: -100%;
+}
+.focus ul li {
+  float: left;
+  width: 20%;
+}
+.focus ol {
+  position: absolute;
+  bottom: 5px;
+  right: 5px;
+  margin: 0;
+}
+.focus ol li {
+  display: inline-block;
+  width: 5px;
+  height: 5px;
+  background-color: white;
+  list-style: none;
+  border-radius: 5px;
+  transition: all .3s;
+}
+.focus ol li.current {
+  width: 15px;
 }
 .focus img {
   width: 100%;

+ 23 - 1
ctrip-mobile/index.html

@@ -9,6 +9,7 @@
   <link rel="stylesheet" href="css/normalize.css">
   <!-- 引入首页的CSS -->
   <link rel="stylesheet" href="css/index.css">
+  <script src="js/index.js"></script>
 </head>
 <body>
   <!-- 顶部搜索 -->
@@ -22,7 +23,28 @@
   </div>
   <!-- 焦点图 -->
   <div class="focus">
-    <img src="upload/focus.jpg" alt="">
+    <ul>
+      <li>
+        <img src="upload/focus3.jpg" alt="">
+      </li>
+      <li>
+        <img src="upload/focus1.jpg" alt="">
+      </li>
+      <li>
+        <img src="upload/focus2.jpg" alt="">
+      </li>
+      <li>
+        <img src="upload/focus3.jpg" alt="">
+      </li>
+      <li>
+        <img src="upload/focus1.jpg" alt="">
+      </li>
+    </ul>
+    <ol>
+      <li class="current"></li>
+      <li></li>
+      <li></li>
+    </ol>
   </div>
   <!-- 局部导航栏 -->
   <ul class="local-nav">

+ 81 - 0
ctrip-mobile/js/index.js

@@ -0,0 +1,81 @@
+window.addEventListener('load', function () {
+  var focus = this.document.querySelector('.focus');
+  var ul = focus.children[0];
+  var ol = focus.children[1];
+  var w = focus.offsetWidth;
+  var index = 0;
+  // 自动播放无缝滚动
+  var timer = setInterval(() => {
+    index++;
+    var left = - index * w;
+    ul.style.transition = "all .3s";
+    ul.style.transform = "translateX(" + left +"px)";
+  }, 2000);
+  // 监听过渡完成事件transitionend
+  ul.addEventListener('transitionend', function () {
+    if(index >= 3){
+      index = 0;
+      ul.style.transition = 'none';
+      var left = - index * w;
+      ul.style.transform = "translateX(" + left + "px)";
+    }else if(index < 0){
+      index = 2;
+      ul.style.transition = 'none';
+      var left = - index * w;
+      ul.style.transform = "translateX(" + left + "px)";
+    }
+    // 小圆点跟随变化
+    ol.querySelector('li.current').classList.remove('current');
+    ol.children[index].classList.add('current');
+  });
+  // 手指滑动轮播图
+  // 触摸拿到手指初始坐标
+  var startX = 0;
+  ul.addEventListener('touchstart', function (e) {
+    startX = e.targetTouches[0].pageX;
+    clearInterval(timer);
+  });
+  // 移动距离
+  var moveX = 0;
+  var flag = false;
+  ul.addEventListener('touchmove', function (e) {
+    moveX = e.targetTouches[0].pageX - startX;
+    var left = - index * w + moveX;
+    ul.style.transform = "translateX("+left+"px)";
+    ul.style.transition = "none";
+    flag = true;
+    //阻止滚动屏幕的默认行为
+    e.preventDefault;
+  });
+  // touchend 
+  ul.addEventListener('touchend', function (e) {
+    if(flag){
+      if(Math.abs(moveX) > 50){
+        // 右滑,上一张
+        if(moveX > 0){
+          index--;
+        // 左滑,下一张
+        }else{
+          index++;
+        }
+        var left = - index * w;
+        ul.style.transform = "translateX("+left+"px)";
+        ul.style.transition = "all .3s";
+      }else {
+        // 回弹
+        var left = - index * w;
+        ul.style.transform = "translateX("+left+"px)";
+        ul.style.transition = "all .1s";
+      }
+    }
+    clearInterval(timer);
+    var timer = setInterval(() => {
+      index++;
+      var left = - index * w;
+      ul.style.transition = "all .3s";
+      ul.style.transform = "translateX(" + left +"px)";
+    }, 2000);
+    console.log(111);
+    
+  });
+})

BIN
ctrip-mobile/upload/focus1.jpg


BIN
ctrip-mobile/upload/focus2.jpg


BIN
ctrip-mobile/upload/focus3.jpg