image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0,
    6. maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
    7. <!-- 引入样式 -->
    8. <link rel="stylesheet" href="./css/normalize.css">
    9. <link rel="stylesheet" href="./css/index.css">
    10. <title>手机端轮播图</title>
    11. <script src="./js/index.js"></script>
    12. </head>
    13. <body>
    14. <!-- 返回顶部模块 -->
    15. <div class="goBack"></div>
    16. <!-- 焦点图模块 -->
    17. <div class="focus">
    18. <ul>
    19. <li><img src="./upload/focus3.jpg" alt=""></li>
    20. <li><img src="./upload/focus1.jpg" alt=""></li>
    21. <li><img src="./upload/focus2.jpg" alt=""></li>
    22. <li><img src="./upload/focus3.jpg" alt=""></li>
    23. <li><img src="./upload/focus1.jpg" alt=""></li>
    24. </ul>
    25. <ol>
    26. <li class="current"></li>
    27. <li></li>
    28. <li></li>
    29. </ol>
    30. </div>
    31. </body>
    32. </html>
    1. /* goBack */
    2. .goBack {
    3. display: none;
    4. position: fixed;
    5. bottom: 50px;
    6. right: 20px;
    7. width: 38px;
    8. height: 38px;
    9. background: url(../images/back.png) no-repeat;
    10. background-size: 38px 38px;
    11. }
    12. /* focus */
    13. .focus {
    14. position: relative;
    15. padding-top: 44px;
    16. overflow: hidden;
    17. }
    18. .focus ul {
    19. overflow: hidden;
    20. width: 500%;
    21. /* 左移和父级一样宽 */
    22. margin-left: -100%;
    23. }
    24. .focus ul li {
    25. float: left;
    26. width: 20%;
    27. }
    28. .focus img {
    29. width: 100%;
    30. }
    31. .focus ol {
    32. position: absolute;
    33. bottom: 5px;
    34. right: 5px;
    35. margin: 0;
    36. }
    37. .focus ol li {
    38. display: inline-block;
    39. width: 5px;
    40. height: 5px;
    41. background-color: red;
    42. list-style: none;
    43. border-radius: 2px;
    44. transition: all .3s;
    45. }
    46. .focus ol li.current {
    47. width: 15px;
    48. }
    1. window.addEventListener('load', function () {
    2. // 1. 获取元素
    3. var focus = document.querySelector('.focus');
    4. var ul = focus.children[0];
    5. //获取focus的宽度
    6. var w = focus.offsetWidth;
    7. var ol = focus.children[1];
    8. //利用定时器 自动播放
    9. var index = 0;
    10. var timer = setInterval(function () {
    11. index++;
    12. //每次移动距离
    13. var translatex = -index * w;
    14. //给ul添加过渡效果 实现图片移动
    15. ul.style.transition = 'all .3s';
    16. //使用transform 就不需要使用定位了
    17. ul.style.transform = 'translateX(' + translatex + 'px)';
    18. }, 2000);
    19. // 2. 无缝滚动:监听过渡事件transitionend完成之后 再调换位置
    20. ul.addEventListener('transitionend', function () {
    21. //无缝滚动 走到最后一张 让索引号恢复为0
    22. if (index >= 3) {
    23. index = 0;
    24. //去掉过渡 让ul 款速的跳转到目标位置(下标为0的位置)
    25. ul.style.transition = 'none';
    26. // 去掉过渡后先移位到最开始下标为0 的位置
    27. var translatex = -index * w;
    28. ul.style.transform = 'translateX(' + translatex + 'px)';
    29. } else if (index < 0) {
    30. index = 2;
    31. ul.style.transition = 'none';
    32. // 去掉过渡后先移位到最开始下标为0 的位置
    33. var translatex = -index * w;
    34. ul.style.transform = 'translateX(' + translatex + 'px)';
    35. }
    36. // 3. 小圆点跟随变化
    37. // 把ol里面li 带有current类名的选出来 去掉类名 remove
    38. ol.querySelector('li.current').classList.remove('current');
    39. // 让当前索引号的小li 加上current add
    40. ol.children[index].classList.add('current');
    41. })
    42. // 4. 手指滑动轮播图
    43. // 触摸元素 touchstart: 获取手指初始坐标
    44. var startX = 0;
    45. var moveX = 0; //后面我们还会使用这个移动距离
    46. var flag = false; //用户按下后 没有挪动
    47. ul.addEventListener('touchstart', function (e) {
    48. //触屏的时候停止计时器
    49. clearInterval(timer);
    50. startX = e.targetTouches[0].pageX;
    51. console.log(startX);
    52. })
    53. // 移动手指 touchmove: 计算手指的滑动距离,并且移动盒子
    54. ul.addEventListener('touchmove', function (e) {
    55. flag = true; //表示移动了
    56. // 计算移动距离
    57. moveX = e.targetTouches[0].pageX - startX;
    58. // 移动盒子: 盒子原来的位置 +手指移动的距离
    59. // 因为原来的位置一定是靠边的 所以这里的初始位置值为 -index * w
    60. var translatex = -index * w + moveX;
    61. // 手指拖动的时候 不需要动画效果 所以去掉过渡效果
    62. ul.style.transition = 'none';
    63. ul.style.transform = 'translateX(' + translatex + 'px)';
    64. e.preventDefault(); //阻止滚动屏幕
    65. })
    66. ul.addEventListener('touchend', function () {
    67. if (flag) { //只有手指移动之后 我们才判断是否回弹 或者播放下一张
    68. // (1) 如果移动距离大于50像素 我们就播放上一张 或者下一张
    69. if (Math.abs(moveX) > 50) {
    70. // 如果是右边滑动 就是播放上一张 moveX是正值
    71. if (moveX > 0) {
    72. index--;
    73. } else {
    74. // 如果是左边滑动 就是播放上一张 moveX是负值
    75. index++;
    76. }
    77. // 做运动
    78. var translatex = -index * w;
    79. //给ul添加过渡效果 实现图片移动
    80. ul.style.transition = 'all .3s';
    81. //使用transform 就不需要使用定位了
    82. ul.style.transform = 'translateX(' + translatex + 'px)';
    83. } else {
    84. // (2)如果移动距离 小于50px 我们就回弹
    85. var translatex = -index * w;
    86. ul.style.transition = 'all .1s';
    87. ul.style.transform = 'translateX(' + translatex + 'px)';
    88. }
    89. flag = false;
    90. }
    91. //手指离开重启定时器
    92. clearInterval(timer); //先清除定时器
    93. timer = setInterval(function () {
    94. index++;
    95. //每次移动距离
    96. var translatex = -index * w;
    97. //给ul添加过渡效果 实现图片移动
    98. ul.style.transition = 'all .3s';
    99. //使用transform 就不需要使用定位了
    100. ul.style.transform = 'translateX(' + translatex + 'px)';
    101. }, 2000);
    102. })
    103. //返回顶部模块制作
    104. var goBack = document.querySelector('.goBack');
    105. var nav = document.querySelector('nav');
    106. window.addEventListener('scroll', function () {
    107. if (window.pageYOffset >= nav.offsetTop) {
    108. goBack.style.display = 'block';
    109. } else {
    110. goBack.style.display = 'none';
    111. }
    112. })
    113. goBack.addEventListener('click', function () {
    114. window.scroll(0, 0);
    115. })
    116. })