javascript实现移动端轮播图


Posted in Javascript onDecember 09, 2020

本文实例为大家分享了js实现移动端轮播图的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 
 <link rel="stylesheet" href="yidong.css" >
</head>
<body>
 <!-- 页头 -->
 <button class="open">打开app</button>
 <div style="display: flex; justify-content: center; background-color: rgb(28, 151, 141);width: 100%; height: 0.8rem;"><div style="display:inline-block; font-size: 0.4rem;"><p class="sun" style="font-size: 0.55rem;">?</p> 
</div><input type="text" style="width: 70%;background-color: rgb(190, 217, 219); font-size: 0.4rem;color: rgb(81, 82, 81);"> <input type="submit" value="?" style="width: 10%;font-size: 0.5rem;"></div>
 <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
 <!-- 轮播图部分 -->
 <div class="lunbo">
  <ul class="lul"> 
  
  <li>
  <a href="">
   <img src="img/1.png" alt="">
  </a>
  </li>
  <li >
  <a href="">
   <img src="img/2.png" alt="">
  </a>
  </li>
  <li >
  <a href="">
   <img src="img/3.png" alt="">
  </a>
  </li>  
  </ul>
 </div>
</body>
</html>

js:

<script src="rem.js"></script>
<script>
 //设置动态的css样式
 
 var lunbo =document.querySelector('.lunbo') 
 var lul=document.querySelector('.lul')
 var fimg =document.querySelectorAll('li')[0];
 var limg =document.querySelectorAll('li')[2];
// cloneNode复制一个元素
// appendChild() 方法可向节点的子节点列表的末尾添加新的子节点,再最后一张图片后面添加第一张图片
 lul.appendChild(fimg.cloneNode(true))
//在第一张图片前面添加最后一张图片 
lul.insertBefore(limg.cloneNode(true),lul.firstChild)
// 获取lul下面全部的li
 var lis= lul.querySelectorAll('li')
 
// 获取li元素的数量
var licount = lis.length;
// 获取轮播图总共的宽度
var lwidth = lunbo.offsetWidth;
// 设置图片盒子的宽度
lul.style.width=licount*lwidth+'px';
//设置每一个li元素的样式 给他们定义宽度 他的宽度就等于我们页面的宽度也就是lunbo的宽度
for(i=0;i<lis.length;i++){
 lis[i].style.width=lwidth+'px'
}
//设置偏移距离
lul.style.left=-lwidth+'px'

// 设置自动轮播
// 设置索引(设置索引为1,因为图片已经偏移了)
var index=1
// 设置定时器先去封装他,因为后面要开启定时器,调用这个函数就行了
var time;//要在外面定义time不然后面清除定时器接收不到函数
//当手指滑动轮播图过快的时候后面的轮播图就不会显示,因为滑动过快时过度没有完成就不会触发webkitTransitionEnd(监听当元素执行完过度效果)
//所以设置一个变量用来控制,(过度效果未完成不能滑动图片)
var con=true
 var ltime=function(){
 time=setInterval(function(){
index++
// 设置偏移 每次偏移都是以最初的点为参照点点的,所以如果每次都便宜一个width的话图片就不动
lul.style.left=(-index*lwidth)+'px'

// 添加过度效果,在最后一张跳到第一张时要清除过度效果所以要加上如果在清除过度后面添加else{ lul.style.transition='all 1s'}的话因为有个定时器所以不能流畅执行
lul.style.transition='all 1s'

setTimeout(function(){
 // 判断是否到最后一张
// 当显示为最后一幢图片时进行操作,最后一张图片的索引值为licount-1
if(index==licount-1){
 index=1;
// 偏移到最开始的位置
lul.style.left=(-index*lwidth)+'px'
//当显示最后一张的时候会移回去,所以要清除过度效果
lul.style.transition='none'}
//如果直接清除过度效果的话最后一张就直接跳过去了,所以让他延迟一会在进行判断(跳转),这就是为什么在最后一张后面要添加第一张图片了 



},1000)

},2000)
 }
ltime();
//设置触摸事件
// 定义手指的坐标 分为x和y
var sx,sy,mx,my,dis;
lul.addEventListener('touchstart',function(q){
 clearInterval(time);
 sx=q.targetTouches[0].clientX;
})

lul.addEventListener('touchmove',function(q){
 if(con==true){
  mx=q.targetTouches[0].clientX;
 dis=mx-sx;
 lul.style.left=-index*lwidth+dis+'px'
 // 为了使过度效果流畅 去除lul的过渡效果
 lul.style.transition='none'
 }
 
})
lul.addEventListener('touchend',function(){
 con=false;
 // 判断是否切换图片
 if(Math.abs(dis)>100){//切换图片 如果手指触摸滑动的距离超过100进行图片切换
 if(dis>0){//如果偏移值为正数则向下一张偏移(向右滑动)
 index--
 }
 else{//如果偏移值为负数则向下一张偏移(向左滑动)
 index++
 }
 //设置轮播图的最终偏移,添加过度
 lul.style.left=-index*lwidth+'px';
 lul.style.transition='all 0.5s'
 }
 else if(Math.abs(dis)>0 ){//确定用户做出拖拽事件,点一下的话不需要做出相关操作
 //设置轮播图回弹,添加过度效果
 lul.style.left=-index*lwidth+'px';
 lul.style.transition='all 0.5s'
 }
//执行完触摸事件就可以从新开启定时器了
sx=0;
mx=0;
dis=0;
ltime()

})
//解决轮播图划到第一张或者最后一张时没有图片
//添加 webkitTransitionEnd 事件,webkitTransitionEnd事件是监听当元素执行完过度效果

 lul.addEventListener('webkitTransitionEnd',function(){
con=true

if(index==licount-1){//当滑动到最后一个图片时展示的是倒数第二张图片让图片展示的为第一张
 index=1;//index时从0开始的
 lul.style.left=-index*lwidth+'px';
 lul.style.transition='none'
 
}
else if(index==0){//当展示的时最后一张图片时,就是第一个位置的图片向前滑动时让他展示最后一张图片
 index=licount-2;
 lul.style.left=-index*lwidth+'px';
 lul.style.transition='none'
 
 
}

 })
 
</script>

效果图:

javascript实现移动端轮播图

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

Javascript 相关文章推荐
插件:检测javascript的内存泄漏
Mar 04 Javascript
jQuery 全选效果实现代码
Mar 23 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
JS字符串处理实例代码
Aug 05 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
利用JS实现简单的日期选择插件
Jan 23 Javascript
three.js 入门案例详解
Jan 23 Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 Javascript
JavaScript ES6 Class类实现原理详解
May 08 Javascript
Vue父子组件传值的一些坑
Sep 16 Javascript
JavaScript实现弹出窗口效果
Dec 09 #Javascript
五句话帮你轻松搞定js原型链
Dec 09 #Javascript
JS常用跨域方法实现原理解析
Dec 09 #Javascript
video.js添加自定义组件的方法
Dec 09 #Javascript
手把手教你如何编译打包video.js
Dec 09 #Javascript
ES6 十大特性简介
Dec 09 #Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 #Javascript
You might like
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
python 队列详解及实例代码
2016/10/18 Python
详解flask入门模板引擎
2018/07/18 Python
浅谈python写入大量文件的问题
2018/11/09 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
python实现扫雷游戏
2020/03/03 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
资深生产主管自我评价
2013/09/22 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
公司总经理岗位职责
2015/04/01 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏