JS仿京东移动端手指拨动切换轮播图效果


Posted in Javascript onApril 10, 2020

如今,移动端web页面在市场上也是占有相当大的比例,而移动端的轮播图效果也是很常见的,今天我就来记录下关于实现一组适用于移动端的可用手指进行拨动切换轮播图的效果。
这个效果的主要技术点依托于触屏设备特有的touch事件;好了,接下来就进入主题吧。

首先是html布局

1. 这里强调的是记得给html加上viewport这个适口属性。
2. 由于在拨动第一张图片以及最后一张图片的时候需要切换到最后一张以及第一张,要想达到理想效果,需要给第一张图片前面加上最后一张图片,而在最后一张图片后加上第一张图片。
3. f_l代表的是左浮动

**html代码如下:**

<ul class='banner_imgs clearfix'>
   <li class='f_l'>
   <a href="#"><img src="image/l8.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l1.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l2.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l3.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l4.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l5.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l6.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l7.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l8.jpg" alt="" /></a>
   </li>
   <li class='f_l'>
   <a href="#"><img src="image/l1.jpg" alt="" /></a>
   </li>
  </ul>
  <!-- 轮播图的 索引 -->
  <ul class="banner_index clearfix">
   <li class="current"></li>
   <li></li>
   <li></li>
   <li></li>
   <li></li>
   <li></li>
   <li></li>
   <li></li>
  </ul>

接下来是css样式

注意,此处并没有加上常规的reset样式代码

.jd_banner .banner_imgs {
 /* 10倍屏幕宽度 */
 width: 1000%;
}
.jd_banner .banner_imgs li {
 /* 一倍的屏幕宽度 */
 width: 10%;
}
.jd_banner .banner_imgs li a {
 display: block;
 width: 100%;
}
.jd_banner .banner_imgs li a img {
 display: block;
 width: 100%;
}
.jd_banner .banner_index {
 position: absolute;
 bottom: 15px;
 left: 50%;
 margin-left: -64px;
}
.jd_banner .banner_index li {
 float: left;
 width: 6px;
 height: 6px;
 border: 1px solid white;
 border-radius: 50%;
 margin: 0 5px;
}
.jd_banner .banner_index li.current {
 background-color: #fff;
}

最后是最最重要的js代码

1. transitionend 过渡结束后触发的效果,在这儿主要是保证图片切换到最后一张我们手动增加的图片完成的瞬间,切换回到真正的第一张图片处;
2. touch事件的三要素: touchstart--手指按上时,touchmove--手指移动时,touchend--手指松开屏幕时;
3. event.touches[0].clientX获取按下一个手指时的位置,可以打印出event查看其包含有哪些属性方法;

window.onload = function() {
 slide();
}

function slide() {
 var bannerImgs = document.querySelector(".banner_imgs");
 var Indexs = document.querySelectorAll(".banner_index li");
 var imgLis = document.querySelectorAll(".banner_imgs li");

 //屏幕宽度
 var screenWidth = document.body.offsetWidth;
 var index = 1;

 //默认显示的应该是第二张图片
 bannerImgs.style.transform = "translateX(" + screenWidth * index * -1 + "px)";

 //添加过渡效果
 function setTransition() {
 bannerImgs.style.webkitTransition = "all .2s";
 bannerImgs.style.transition = "all .2s";
 }

 //清除过渡效果
 function clearTransition() {
 bannerImgs.style.webkitTransition = "none";
 bannerImgs.style.transition = "none";
 }

 //设置移动距离
 function setTranslateX(distance) {
 bannerImgs.style.webkitTransform = "translateX(" + distance + "px)";
 bannerImgs.style.transform = "translateX(" + distance + "px)";
 }

 //控制小圆点
 function setPoint() {
 for (var i = 0; i < Indexs.length; i++) {
  Indexs[i].className = "";
 }
 Indexs[index - 1].className = "current";
 }

 //设置定时器
 var timer = setInterval(function() {
 index++;
 setTransition();
 setTranslateX(screenWidth * index * -1);
 }, 1000);

 //添加过渡动画结束事件
 bannerImgs.addEventListener("transitionend", function() {
 if (index > 8) {
  index = 1;
 } else if (index < 1) {
  index = 8;
 }
 clearTransition();
 setTranslateX(screenWidth * index * -1);
 setPoint();
 })


 //添加touch事件
 var startX = 0;
 var moveX = 0;
 var isMove = false;

 bannerImgs.addEventListener("touchstart", function(event) {
 isMove = false;
 clearInterval(timer);
 startX = event.touches[0].clientX;
 })

 bannerImgs.addEventListener("touchmove", function(event) {
 isMove = true;
 moveX = event.touches[0].clientX - startX;
 setTranslateX(moveX + index * screenWidth * -1);
 })

 bannerImgs.addEventListener("touchend", function(event) {
 if(isMove && Math.abs(moveX) > screenWidth/3){
  if (moveX < 0) {
  index++;
  } else if (moveX > 0) {
  index--;
  }
 }
 setTransition();
 setTranslateX(index * screenWidth * -1);
 timer = setInterval(function() {
  index++;
  setTransition();
  setTranslateX(screenWidth * index * -1);
 }, 1000);
 })
}

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript实现unicode和字符的互相转换
Jul 18 Javascript
Js实现自定义右键行为
Mar 26 Javascript
js实现新浪微博首页效果
Oct 16 Javascript
微信小程序图表插件(wx-charts)实例代码
Jan 17 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 Javascript
js简单实现网页换肤功能
Apr 07 Javascript
angular中不同的组件间传值与通信的方法
Nov 04 Javascript
js Element Traversal规范中的元素遍历方法
Apr 19 Javascript
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
详解微信小程序调用支付接口支付
Apr 28 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
Mar 07 Javascript
vue watch监控对象的简单方法示例
Jan 07 Vue.js
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
Dec 12 #Javascript
JavaScript利用正则表达式替换字符串中的内容
Dec 12 #Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 #Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 #Javascript
js原生之焦点图转换加定时器实例
Dec 12 #Javascript
IntersectionObserver API 详解篇
Dec 11 #Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
Dec 11 #Javascript
You might like
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
Javascript中的常见排序算法
2007/03/27 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
Django中Forms的使用代码解析
2018/02/10 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
python绘制立方体的方法
2018/07/02 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
python圣诞树编写实例详解
2020/02/13 Python
Python configparser模块常用方法解析
2020/05/22 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
python利用opencv实现颜色检测
2021/02/23 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
计算机应用专业推荐信
2013/11/13 职场文书
军训心得体会
2013/12/31 职场文书
师德师风自查材料
2014/10/14 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers