<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0,
maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
<!-- 引入样式 -->
<link rel="stylesheet" href="./css/normalize.css">
<link rel="stylesheet" href="./css/index.css">
<title>手机端轮播图</title>
<script src="./js/index.js"></script>
</head>
<body>
<!-- 返回顶部模块 -->
<div class="goBack"></div>
<!-- 焦点图模块 -->
<div class="focus">
<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>
</body>
</html>
/* goBack */
.goBack {
display: none;
position: fixed;
bottom: 50px;
right: 20px;
width: 38px;
height: 38px;
background: url(../images/back.png) no-repeat;
background-size: 38px 38px;
}
/* focus */
.focus {
position: relative;
padding-top: 44px;
overflow: hidden;
}
.focus ul {
overflow: hidden;
width: 500%;
/* 左移和父级一样宽 */
margin-left: -100%;
}
.focus ul li {
float: left;
width: 20%;
}
.focus img {
width: 100%;
}
.focus ol {
position: absolute;
bottom: 5px;
right: 5px;
margin: 0;
}
.focus ol li {
display: inline-block;
width: 5px;
height: 5px;
background-color: red;
list-style: none;
border-radius: 2px;
transition: all .3s;
}
.focus ol li.current {
width: 15px;
}
window.addEventListener('load', function () {
// 1. 获取元素
var focus = document.querySelector('.focus');
var ul = focus.children[0];
//获取focus的宽度
var w = focus.offsetWidth;
var ol = focus.children[1];
//利用定时器 自动播放
var index = 0;
var timer = setInterval(function () {
index++;
//每次移动距离
var translatex = -index * w;
//给ul添加过渡效果 实现图片移动
ul.style.transition = 'all .3s';
//使用transform 就不需要使用定位了
ul.style.transform = 'translateX(' + translatex + 'px)';
}, 2000);
// 2. 无缝滚动:监听过渡事件transitionend完成之后 再调换位置
ul.addEventListener('transitionend', function () {
//无缝滚动 走到最后一张 让索引号恢复为0
if (index >= 3) {
index = 0;
//去掉过渡 让ul 款速的跳转到目标位置(下标为0的位置)
ul.style.transition = 'none';
// 去掉过渡后先移位到最开始下标为0 的位置
var translatex = -index * w;
ul.style.transform = 'translateX(' + translatex + 'px)';
} else if (index < 0) {
index = 2;
ul.style.transition = 'none';
// 去掉过渡后先移位到最开始下标为0 的位置
var translatex = -index * w;
ul.style.transform = 'translateX(' + translatex + 'px)';
}
// 3. 小圆点跟随变化
// 把ol里面li 带有current类名的选出来 去掉类名 remove
ol.querySelector('li.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) {
//触屏的时候停止计时器
clearInterval(timer);
startX = e.targetTouches[0].pageX;
console.log(startX);
})
// 移动手指 touchmove: 计算手指的滑动距离,并且移动盒子
ul.addEventListener('touchmove', function (e) {
flag = true; //表示移动了
// 计算移动距离
moveX = e.targetTouches[0].pageX - startX;
// 移动盒子: 盒子原来的位置 +手指移动的距离
// 因为原来的位置一定是靠边的 所以这里的初始位置值为 -index * w
var translatex = -index * w + moveX;
// 手指拖动的时候 不需要动画效果 所以去掉过渡效果
ul.style.transition = 'none';
ul.style.transform = 'translateX(' + translatex + 'px)';
e.preventDefault(); //阻止滚动屏幕
})
ul.addEventListener('touchend', function () {
if (flag) { //只有手指移动之后 我们才判断是否回弹 或者播放下一张
// (1) 如果移动距离大于50像素 我们就播放上一张 或者下一张
if (Math.abs(moveX) > 50) {
// 如果是右边滑动 就是播放上一张 moveX是正值
if (moveX > 0) {
index--;
} else {
// 如果是左边滑动 就是播放上一张 moveX是负值
index++;
}
// 做运动
var translatex = -index * w;
//给ul添加过渡效果 实现图片移动
ul.style.transition = 'all .3s';
//使用transform 就不需要使用定位了
ul.style.transform = 'translateX(' + translatex + 'px)';
} else {
// (2)如果移动距离 小于50px 我们就回弹
var translatex = -index * w;
ul.style.transition = 'all .1s';
ul.style.transform = 'translateX(' + translatex + 'px)';
}
flag = false;
}
//手指离开重启定时器
clearInterval(timer); //先清除定时器
timer = setInterval(function () {
index++;
//每次移动距离
var translatex = -index * w;
//给ul添加过渡效果 实现图片移动
ul.style.transition = 'all .3s';
//使用transform 就不需要使用定位了
ul.style.transform = 'translateX(' + translatex + 'px)';
}, 2000);
})
//返回顶部模块制作
var goBack = document.querySelector('.goBack');
var nav = document.querySelector('nav');
window.addEventListener('scroll', function () {
if (window.pageYOffset >= nav.offsetTop) {
goBack.style.display = 'block';
} else {
goBack.style.display = 'none';
}
})
goBack.addEventListener('click', function () {
window.scroll(0, 0);
})
})