发表于: 2023-01-12 19:57:02

0 146




移动端轮播图知识点今天补全了部分:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">            <!-- 移动端click事件有300ms延时   解决方案:user-scalable=no  禁止页面缩放-->
 <meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
 <title>移动端轮播图</title>
 <style>

   * {
margin: 0;
     padding: 0;
     list-style: none;
   }

body {
max-width: 540px;
     min-width: 320px;
     margin: 0 auto;
     font: normal 14px/1.5 Tahoma, "Lucida Grande", Verdana, "Microsoft Yahei", STXihei, hei;
     color: #000;
     background: #f2f2f2;
     overflow-x: hidden;
     -webkit-tap-highlight-color: transparent;
     background-color: #F2F2F2;
   }
.focus {
overflow: hidden;
     position: relative;
     width: 100%;
     height: 300px;
   }

ul {
overflow: hidden;
     margin-left: -100%;
     width: 500%;
   }
ul li {
float: left;
     width: 20%;
   }

img {
width: 100%;
     height: 300px
   }
ol {
position: absolute;
     bottom: 10px;
     right: 10px;
   }
ol li {
width: 10px;
     height: 10px;
     display: inline-block;
     background-color: red;
     border-radius: 4px;
     transition: all .3s;
   }
.current {
width: 20px;
   }

.goBack {
display: none;
     position: fixed;
     bottom: 50px;
     right: 20px;
     width: 38px;
     height: 38px;
     background: url(../js2-DOM/图片/.jpg) no-repeat;
     background-size: 38px 38px;
   }
.a {
width: 540px;
     height: 1000px;
     background-color: skyblue;
     margin-top: 10px;
   }

</style>
 <script src="移动端j轮播图js/index.js"></script>
</head>
<body>
<!-- 返回顶部模块 -->
<div class="goBack"></div>

<div class="focus">
 <ul>
   <li><img src="../js2-DOM/图片/.jpg" alt=""></li>
   <li><img src="../js2-DOM/图片/恶魔.jpg" alt=""></li>
   <li><img src="../js2-DOM/图片/.jpg" alt=""></li>
   <li><img src="../js2-DOM/图片/.jpg" alt=""></li>
   <li><img src="../js2-DOM/图片/恶魔.jpg" alt=""></li>
 </ul>
 <ol>
   <li class="current"></li>
   <li></li>
   <li></li>
 </ol>
</div>

<div class="a"></div>
</body>
</html>


js代码:

window.addEventListener('load',function() {
//1、获取元素
   var  focus = document.querySelector('.focus');
   // 获取 focus ul
   var ul = focus.children[0];
   //获得focus 的宽度
   var w = focus.offsetWidth;
   // 获取 focus ol
   var ol = focus.children[1];
   //2、利用定时器自动轮播图片
   var index = 0;
   var timer = setInterval(function(){
index++;
       var translatex = -index * w;
       //添加一个过渡效果
       ul.style.transition = 'all .5s'; //transition 属性设置元素当过渡效果
       //transform 属性允许你旋转,缩放,倾斜或平移给定元素。
       ul.style.transform = 'translateX(' + translatex + 'px)';
   },2000);
   //等着我们过渡完成之后,再去判断 监听过渡完成的事件 transitionend
   ul.addEventListener('transitionend',function() {
//无缝滚动
       if(index >= 3) {
index = 0;
           // console.log(index);
           // 去掉过渡效果 这样让我们的ul 快速的跳到目标位置
           ul.style.transition = 'none';
           //利用最新索引号 乘以 宽度 去滚动图片
           var translatex = -index * w;
           ul.style.transform = 'translateX(' + translatex + 'px)';
       } else if(index < 0) {
index = 2;
           // 去掉过渡效果 这样让我们的ul 快速的跳到目标位置
           ul.style.transition = 'none';
           //利用最新索引号 乘以 宽度 去滚动图片
           var translatex = -index * w;
           ul.style.transform = 'translateX(' + translatex + 'px)';
       }
//3、小圆点跟随变化
       // ol里面li带有current类名的选出来去掉类名 remove
       ol.querySelector('.current').classList.remove('current');
       // 让当前索引号 的小li 加上 current  add
       ol.children[index].classList.add('current');
   });

   //4、手指滑动轮播图
   //触摸元素 touchstart 获得手指初始坐标
   var startX = 0;
   var moveX = 0;  //后面需要使用到这个移动距离 所以定义一个全局变量
   var flag = false;
   ul.addEventListener('touchstart', function(e) {
startX = e.targetTouches[0].pageX;
       //手指触摸的时候停止定时器
       clearInterval(timer);
   })
//移动手指 touchmove 计算手指的滑动距离,并且移动盒子
   ul.addEventListener('touchmove', function(e) {
//计算移动距离
       moveX = e.targetTouches[0].pageX - startX;
       // 移动盒子 : 盒子原来的距离 + 手指移动的距离
       var translatex = -index * w + moveX;
       //手指拖动的时候,不需要动画效果 所以要取消过渡效果
       ul.style.transition = 'none';
       ul.style.transform = 'translateX(' + translatex + 'px)';
       flag = true; //如果用户手指移动过 我们再去判断 否则不做判断效果
       e.preventDefault(); // preventDefault  阻止默认行为    阻止滚动屏幕的行为
   })
//手指离开 根据位移距离去判断是回弹还是播放上一张下一张
   ul.addEventListener('touchend', function(e) {
if(flag) {
// (1)如果我们移动距离 大于50 像素 我们就播放上一张或者下一张
           if(Math.abs(moveX) > 50) {
//如果是 右滑 播放上一张 moveX 是正值
               if(moveX > 0) {
index--;
               } else {
//如果是 左滑 播放上一张 moveX 是负值
                   index++;
               }
var translatex = -index * w;
               //手指拖动的时候,不需要动画效果 所以要取消过渡效果
               ul.style.transition = 'all .3s';
               ul.style.transform = 'translateX(' + translatex + 'px)';
           } else {
//(2) 如果移动距离小于 50像素 我们就回弹
               var translatex = -index * w;
               ul.style.transition = 'all .1s';
               ul.style.transform = 'translateX(' + translatex + 'px)';
           }
}
//手指离开的时候重新开启定时器
       clearInterval(timer);
       timer = setInterval(function(){
index++;
           var translatex = -index * w;
           //添加一个过渡效果
           ul.style.transition = 'all .5s'; //transition 属性设置元素当过渡效果
           //transform 属性允许你旋转,缩放,倾斜或平移给定元素。
           ul.style.transform = 'translateX(' + translatex + 'px)';
       },2000);

   });

   //返回顶部模块
   var goBack = document.querySelector('.goBack');
   var a = document.querySelector('.a');
   var aTop = a.offsetTop;
   window.addEventListener('scroll', function() {
if(window.pageYOffset >= aTop) {
goBack.style.display = 'block';
       }else {
goBack.style.display = 'none';
       }
});
   goBack.addEventListener('click',function() {
window.scroll(0,0);
   });

})




返回列表 返回列表
评论

    分享到