经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
移动端轮播图
来源:cnblogs  作者:rabbit_zero  时间:2018/12/10 9:37:22  对本文有异议

这是结构

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, user-scalable=no initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <link rel="stylesheet" href="./css/jd_phnoe.css">
  8. <link rel="stylesheet" href="./css/base.css">
  9. <title>Document</title>
  10. <script src="./js/jd_phnoe.js"></script>
  11. </head>
  12. <body>
  13. <div class="jd_layout">
  14. <div class="jd_banner">
  15. <ul class="jd_bannerimg clearfix">
  16. <li>
  17. <a href="javascript:;"> <img src="./uploads/l1.jpg" alt="" /> </a>
  18. </li>
  19. <li>
  20. <a href="javascript:;"> <img src="./uploads/l2.jpg" alt="" /> </a>
  21. </li>
  22. <li>
  23. <a href="javascript:;"> <img src="./uploads/l3.jpg" alt="" /> </a>
  24. </li>
  25. <li>
  26. <a href="javascript:;"> <img src="./uploads/l4.jpg" alt="" /> </a>
  27. </li>
  28. <li>
  29. <a href="javascript:;"> <img src="./uploads/l5.jpg" alt="" /> </a>
  30. </li>
  31. <li>
  32. <a href="javascript:;"> <img src="./uploads/l6.jpg" alt="" /> </a>
  33. </li>
  34. <li>
  35. <a href="javascript:;"> <img src="./uploads/l7.jpg" alt="" /> </a>
  36. </li>
  37. <li>
  38. <a href="javascript:;"> <img src="./uploads/l8.jpg" alt="" /> </a>
  39. </li>
  40. </ul>
  41. <!-- 点标记 -->
  42. <ul class="jd_bannerIndicator clearfix">
  43. <li></li>
  44. <li class="active"></li>
  45. <li></li>
  46. <li></li>
  47. <li></li>
  48. <li></li>
  49. <li></li>
  50. <li></li>
  51. </ul>
  52. </div>
  53. </div>
  54. </body>
  55. </html>

这是CSS

  1. /* 搜索部分 */
  2. .jd_layout{
  3. width: 100%;
  4. max-width: 640px;
  5. min-width: 320px;
  6. height: auto;
  7. margin: 0px auto;
  8. background-color: #ccc;
  9. }
  10.  
  11. /* 轮播图部分 */
  12. .jd_banner{
  13. width: 100%;
  14. overflow: hidden;
  15. position: relative;
  16. }
  17. .jd_bannerimg{
  18. width: 1000%;
  19. position: relative;
  20. }
  21. .jd_bannerimg > li{
  22. width: 10%;
  23. float: left;
  24. }
  25. .jd_bannerimg>li img{
  26. width: 100%;
  27. /*1.设置为块元素
  28. 2.可以将文本的字体大小设置为0
  29. 3.vertical-align:bottom*/
  30. display: block;
  31. }
  32. /* 点标记 */
  33. .jd_bannerIndicator{
  34. position: absolute;
  35. left: 50%;
  36. bottom: 5px;
  37. transform: translateX(-50%);
  38. }
  39. .jd_bannerIndicator li{
  40. width: 6px;
  41. height: 6px;
  42. float: left;
  43. border: 1px solid #fff;
  44. border-radius: 50%;
  45. /* opacity: 0.7; */
  46. margin: 0 3px;
  47. /* cursor: pointer; */
  48. }
  49. .jd_bannerIndicator li:first-of-type{
  50. margin-left: 0px;
  51. }
  52. .jd_bannerIndicator >li.active{
  53. background-color: #fff;
  54. }

dase

  1. /*公共样式*/
  2.  
  3. /*1.样式重置*/
  4. html,body,ul,li,img,a,p,div,form,input,h3{
  5. padding: 0;
  6. margin: 0;
  7. /*设置盒模型*/
  8. box-sizing: border-box;
  9. /*去除移动端特有的点击高亮效果*/
  10. -webkit-tap-highlight-color: transparent;
  11. }
  12. body{
  13. font-family: "微软雅黑",sans-serif;
  14. font-size: 13px;
  15. }
  16. a,
  17. a:hover{
  18. color: #666;
  19. text-decoration: none;
  20. }
  21. ul{
  22. list-style: none;
  23. }
  24. input{
  25. /*1.清除文本框获取焦点时默认的边框阴影*/
  26. outline: none;
  27. /*2.去除边框*/
  28. border: none;
  29. /*3.添加边框*/
  30. border: 1px solid #ccc;
  31. }
  32.  
  33. /*2.添加新的样式*/
  34. .f_left{
  35. float: left;
  36. }
  37. .f_right{
  38. float: right;
  39. }
  40. .m_left10{
  41. margin-left: 10px;
  42. }
  43. .m_right10{
  44. margin-right: 10px;
  45. }
  46. .m_top10{
  47. margin-top: 10px;
  48. }
  49. .clearfix::before,
  50. .clearfix::after{
  51. content: "";
  52. display: block;
  53. height: 0;
  54. line-height: 0px;
  55. clear: both;
  56. visibility: hidden;
  57. }

js

  1. window.onload = function () {
  2. banner();
  3. }
  4. //轮播图
  5. function banner(){
  6. /*1.设置修改轮播图的页面结构
  7. * a.在开始位置添加原始的最后一张图片
  8. * b.在结束位置添加原始的第一张图片*/
  9. /*1.1.获取轮播图结构*/
  10. var banner=document.querySelector(".jd_banner");
  11. /*1.2.获取图片容器*/
  12. var imgBox=banner.querySelector("ul:first-of-type");
  13. //1.3 获取第一张图片
  14. var first=imgBox.querySelector("li:first-of-type");
  15. //1.4获取最后一张图
  16. var last=imgBox.querySelector("li:last-of-type");
  17. // console.log(first);
  18. // console.log(last);
  19. //克隆添加图片
  20. /*1.5.在首尾插入两张图片 cloneNode:复制一个dom元素*/
  21. imgBox.appendChild(first.cloneNode(true));
  22. /*1.6insertBefore(需要插入的dom元素,位置)*/
  23. imgBox.insertBefore(last.cloneNode(true),imgBox.firstChild);
  24. //获取对应的样式
  25. //2.1获取li的位置
  26. var lis=imgBox.querySelectorAll("li");
  27. /*2.2 获取li元素的数量*/
  28. var count=lis.length;
  29. /*2.3.获取banner的宽度*/
  30. var bannerWidth=banner.offsetWidth;
  31. /*2.4 设置图片盒子的宽度*/
  32. imgBox.style.width=count*bannerWidth+"px";
  33. /*2.5 设置每一个li(图片)元素的宽度*/
  34. for(var i=0; i < lis.length;i++){
  35. lis[i].style.width=bannerWidth+"px";
  36. }
  37. /*定义图片索引:图片已经有一个宽度的默认偏移*/
  38. var index=1;
  39. /*3.设置默认的偏移*/
  40. imgBox.style.left=-bannerWidth+"px";
  41. /*4.当屏幕变化的时候,重新计算宽度*/
  42. window.onresize=function(){
  43. bannerWidth=banner.offsetWidth+"px";
  44. imgBox.style.width=count*bannerWidth+"px";
  45. for(var i = 0; i < lis.length;i++){
  46. lis[i].style.width=bannerWidth+"px";
  47. }
  48. imgBox.style.left=-index*bannerWidth+"px";
  49. }
  50. //自动轮播
  51. var timerId;
  52. var strtime=function(){
  53. timerId=setInterval(function(){
  54. index++;
  55. //添加过度效果
  56. imgBox.style.transition="left 0.5s ease-in-out"
  57. //设置偏移量
  58. imgBox.style.left=(-index*bannerWidth)+"px";
  59. setTimeout(function(){
  60. //当走到最后一张时候,我就让他等于最后一张
  61. if(index==count-1){
  62. index=1;
  63. // 清除过度效果
  64. imgBox.style.transition="none";
  65. /*偏移到指定的位置*/
  66. imgBox.style.left=(-index*bannerWidth)+"px";
  67. }
  68. },500)
  69. },1500)
  70. }
  71. //自动播放调用
  72. strtime();
  73. //实现手动轮播
  74. var startX,moveX,distanceX;
  75. /*为图片添加触摸事件--触摸开始*/
  76. var isEnd = true;
  77. imgBox.addEventListener("touchstart",function(e){
  78. //停止定时器
  79. clearInterval(timerId);
  80. //console.log(e);
  81. startX=e.targetTouches[0].clientX;
  82. });
  83. //为图片添加触摸过程,滑动图片
  84. imgBox.addEventListener("touchmove",function(e){
  85. if(isEnd==true){
  86. //console.log(123);
  87. /*记录手指在滑动过程中的位置*/
  88. moveX=e.targetTouches[0].clientX;
  89. /*计算坐标的差异*/
  90. distanceX=moveX-startX;
  91. //清除过度效果
  92. imgBox.style.transition="none";
  93. //基于之前轮播图偏移的位置
  94. imgBox.style.left=(-index*bannerWidth + distanceX)+"px";
  95. }
  96. })
  97. /*添加触摸结束事件*/
  98. imgBox.addEventListener("touchend",function(e){
  99. //获取滑动距离,判断是否超过100px
  100. isEnd=false;
  101. if(Math.abs(distanceX) > 50){
  102. //判断滑动方向
  103. if(distanceX > 0){//上一张
  104. index--;
  105. }else{//下一张
  106. index++;
  107. }
  108. //过度效果
  109. imgBox.style.transition="left 0.5s ease-in-out";
  110. //偏移位置
  111. imgBox.style.left=-index*bannerWidth+"px";
  112. }else if(Math.abs(distanceX) > 0){//回弹效果
  113. //过度效果
  114. imgBox.style.transition="left 0.5s ease-in-out";
  115. //偏移位置
  116. imgBox.style.left=-index*bannerWidth+"px";
  117. }
  118. /*将上一次move所产生的数据重置为0*/
  119. startX=0;
  120. moveX=0;
  121. distanceX=0;
  122. });
  123. /*webkitTransitionEnd:可以监听当前元素的过渡效果执行完毕,当一个元素的过渡效果执行完毕的时候,会触发这个事件*/
  124. imgBox.addEventListener("webkitTransitionEnd",function(){
  125. console.log(index,33333);
  126. /*如果到了最后一张(count-1),回到索引1*/
  127. /*如果到了第一张(0),回到索引count-2*/
  128. if(index==count-1){
  129. index=1;
  130. imgBox.style.transition="none";
  131. imgBox.style.left=-index*bannerWidth+"px";
  132. }else if(index==0){
  133. index=count-2;
  134. imgBox.style.transition="none";
  135. imgBox.style.left=-index*bannerWidth+"px";
  136. }
  137. yuandian(index);
  138. setTimeout(function () {
  139. isEnd=true;
  140. clearInterval(timerId);
  141. strtime();
  142. },100)
  143. });
  144. // //圆点排他
  145. var yuandian=function (index) {
  146. //先找到所有的li 进行遍历移除所有样式,为自己加上样式
  147. var lis=banner.querySelector("ul:last-of-type").querySelectorAll("li");
  148. for(var i = 0; i < lis.length; i++){
  149. lis[i].classList.remove("active");
  150. }
  151. lis[index-1].classList.add("active");
  152. }
  153. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号