一、前言

移动端的轮播图通常有以下几个功能:

1. 自动轮播图且无缝 定时器,过渡*/
                                                2. 小圆点点要随着图片的轮播改变 根据索引切换
                                                3. 滑动效果 利用touch事件完成*/
                                                4. 滑动结束的时候 如果滑动的距离不超过屏幕的1/3 吸附回去 
                                                5. 滑动结束的时候 如果滑动的距离超过屏幕的1/3 切换(上一张,下一张)根据滑动的方向,

二、基础内容

1、自动轮播图实现:

(1)先获取到需要操作的dom

    /*轮播图*/var banner = document.querySelector('.jd_banner');/*屏幕宽度*/var width = banner.offsetWidth;/*图片容器*/var imageBox = banner.querySelector('ul:first-child');/*点容器*/var pointBox = banner.querySelector('ul:last-child');/*所有的点*/var points = pointBox.querySelectorAll('li');

(2)利用定时器和index索引值让轮播图动起来

        var index = 1; //让index的初始值为0var timer = setInterval(function(){//设置定时器
   index++//每秒中让定时器值加1imageBox.style.transition = "all 0.2s" //加过渡imageBox.style.webkitTransition = "all 0.2s"/*移动*//*每次ul移动的距离 = index * width*/imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';},2000)/*需要等最后一张动画结束去判断是否瞬间定位到第一张*//*当index=9的时候,然后瞬间将当前的索引变为1*/imageBox.addEventListener('transitionend',function(){if(index >=9 ){ //当索引值大于9的时候,瞬间让当前索引值为1index=1  ;/*清除过渡*/imageBox.style.transition='none'imageBox.style.webkitTransition='none'/*做位移*//*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';}else if(index <=0 ){/*用户向左边,index小于等于0*/index=8;/*清除过渡*/imageBox.style.transition='none'imageBox.style.webkitTransition='none'/*做位移*//*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候需要停止无缝滚动*/imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';}/*此时此刻index的取值范围只能是1-8了*//*点的取值范围是0-7*/console.log(index)setPoint() //设置了一个点高亮的函数
})

 2. 小圆点点要随着图片的轮播改变 根据索引切换*/

 /*设置点的方法*/var setPoint = function(){//先遍历清除所有的now样式for(var i=0; i<points.length; i++){var obj = points[i]/*清除样式*/obj.classList.remove('now')}//然后给将要高亮的点加上样式points[index - 1].classList.add('now');}

3. 滑动效果 利用touch事件完成*/

/*绑定滑动事件*/var startX = 0;    //初始化开始滑动时的坐标var distanceX = 0; //设置开始滑动的距离var isMove = false //标志是否滑动
imageBox.addEventListener('touchstart',function(e){/*在鼠标一开始滑动的时候就清除定时器不让轮播图有自动滚动的效果*/clearInterval(timer)/*记录起始位置的x坐标*/startX = e.touches[0].clientX;})imageBox.addEventListener('touchmove',function(e){isMove = true//开始滑动的时候isMove = true/*记录滑动过程中的x坐标*/var moveX = e.touches[0].clientX;/*在滑动过程中作对比*//*计算位移  有正负方向*/distanceX = moveX - startX/*这个用来计算目标元素的位移*//*元素的定位等于当前定位*//*目标定位 = 当前定位 + 手指移动的定位*/var translateX = -index * width + distanceXconsole.log(translateX)/*如果元素有过渡。肯能会有迟钝的效果,所以在之前需要清除过渡*/imageBox.style.transition='none'imageBox.style.webkitTransition='none'/*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';})

4、在滑动结束的时候判断滑动的距离是否大于设备宽度是1/3.

大于:切换到上一张或者下一张

小于:让轮播图吸附回去,还是显示之前那一张

imageBox.addEventListener('touchend',function(){//如果滑动的距离小于设备的1/3,就让他吸附回去if(Math.abs(distanceX)<width/3 &&  isMove){//吸附回去/*清除过渡*/imageBox.style.transition='none'imageBox.style.webkitTransition='none'/*做位移*//*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';}else{//切换//上一张//下一张//往左滑动是下一张,往右滑动是上一张//可以根据distance的正负方向来判断滑动的方向if(distanceX>0){index--console.log('右')}else{index++console.log('左')}//根据index动画的移动/*清除过渡*/imageBox.style.transition='none'imageBox.style.webkitTransition='none'/*做位移*//*移动:只能在自动滚动的时候无缝滚动,但是当用户开始滑动的时候*/imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';}//最后做一次参数重置startX=0;distanceX=0;isMove = true;clearInterval(timer)timer = setInterval(function(){/*加过渡*/index++imageBox.style.transition = "all 0.2s"imageBox.style.webkitTransition = "all 0.2s"/*移动*/imageBox.style.transform = 'translateX(' + (-index*width)+ 'px)';imageBox.style.webkitTransform = 'translateX(' + (-index*width) + 'px)';/*现在是可以滚动了,但是没有加无缝效果*/},2000)

三、总结

转载于:https://www.cnblogs.com/xxm980617/p/11204497.html

web移动端_移动端的轮播相关推荐

  1. web前端必学功法之一:轮播图

    web前端必学功法之一:轮播图 效果演示: <style>* {margin: 0;padding: 0;}/* 去除a标签的下划线 */a {text-decoration: none; ...

  2. 手html左右轮播,移动端横向滑屏之轮播图

    图片描述 移动端的轮播图可以有很多方式实现,最常见的可以使用定位 + 手指事件.但是我这里介绍的是 CSS3 中的 2d 变换和手指事件,因为变换属性的代码更加简洁优雅 一. 移动端的准备工作 * { ...

  3. 移动端京东添加触摸事件轮播图

    /*轮播图*/ function bannerEffect(){/*1.设置修改轮播图的页面结构* a.在开始位置添加原始的最后一张图片* b.在结束位置添加原始的第一张图片*//*1.1.获取轮播图 ...

  4. web前端入门到实战:以轮播效果为案例谈如何写优质代码

    作为程序员大家在写代码时谈的最多的就是代码的拓展性.复用性.本文就以大家熟悉的轮播效果为案例,讲一讲写优质代码的思路和实践. 文章分三个步骤.第一步,实现基本功能:第二步,考虑到代码的封装性和复用性: ...

  5. js轮播图片小圆点变化_原生js实现轮播图(两种方法)

    第一种: 这个是之前写的,比较草率,没有注释,如果这个看不懂就去看第二个,比较仔细,主要是了解他,后面都会有一些插件来使用,很方便,只要几行代码就可写出各种各样的代码,所以,不懂的话,不要太在意, 第 ...

  6. js轮播图片小圆点变化_纯js实现轮播图,详解(简单,无缝,小圆点,左右手动切换,自动轮动)...

    无论用什么语言开发可视化界面,都有一个叫轮播图的东西.我们现在有个需求,如图: slideshow1.PNG 左右切换按钮默认为隐藏,当鼠标进入图片时,左右切换按钮时显示的,当鼠标离开图片时左右切换按 ...

  7. phpcms移动端和pc端_移动端调试大法

    文章:樊秀宝(北京中心-小易F8技术小组) 排版:suny 在日常项目中的开发中,接触移动端开发的小伙伴们免不了要和移动端调试打交道.本文总结了常用的移动端调试方法,欢迎大家学习和补充. 01 谷歌浏 ...

  8. pc端_移动端_H5_ QQ在线客服链接代码

    强烈推荐: http://wpa.qq.com/msgrd?v=3&uin=1846189021&site=qq&menu=yes PC端:QQ在线客服链接代码 <a h ...

  9. picker插件 vue 移动端_移动端的picker参考vux

    1 2 3 4 5 6 制作移动端的picker参考vux 7 8 9 *{10 margin: 0;11 padding: 0;12 }13 14 15 .content {16 position: ...

最新文章

  1. Python 二分查找算法
  2. 【机器学习基础】终于把XGBoost总结写出来了!
  3. bat/cmd 抛出错误码和捕获错误
  4. windbg学习.formats--转换成各种进制
  5. 说一说,求一个正整数的二进制中0的个数
  6. IOS开发之表视图(UITableView)
  7. c语言中stdbool.h的使用
  8. CSV格式数据如何导入MySQL?
  9. AI超人赛车手狂虐人类登Nature封面!1000台PS4训练,「苏菲」极限超车独霸赛道...
  10. 算法导论2nd 10.1-7
  11. 2.2数据通信的基础知识
  12. 使用 jQuery Mobile 与 HTML5 开发 Web App (七) —— jQuery Mobile 列表
  13. Android异常总结---ActivityManager: Warning: Activity not started,its current task has been brought to th
  14. 几何画板菜单栏有哪些功能
  15. 为什么我选择用 C 编写游戏?
  16. 【linux高级程序设计】(第九章)进程间通信-管道 3
  17. Spark中加载本地(或者hdfs)文件以及SparkContext实例的textFile使用
  18. Vm虚拟化连不上存储服务器,VMware服务器虚拟化、虚拟桌面应该选择什么存储品牌最好--我们有软硬方案...
  19. Python压缩文件夹
  20. win11桌面图标怎么调大小

热门文章

  1. HBase源代码分析之MemStore的flush发起时机、推断条件等详情(二)
  2. 小程序 座位管理系统(一)(纯前端)
  3. SQL中的多表查询,以及JOIN的顺序重要么?
  4. 教程-Delphi调用百度地图API(XE8+WIN7)
  5. Python 进阶_闭包 amp; 装饰器
  6. ios - Push远程通知代码设置 DeviceToken
  7. linuxSVN版本库及同步文件到WEB目录
  8. HDU_1253 胜利大逃亡(BFS)
  9. A Quick Guide For Windows 2008 Server Core
  10. 怎样使用Debussy+ModelSim快速查看前仿真波形