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 相关文章推荐
Jquery Validation插件防止重复提交表单的解决方法
Mar 05 Javascript
js模拟类继承小例子
Jul 17 Javascript
JQuery的Ajax跨域请求原理概述及实例
Apr 26 Javascript
将list转换为json失败的原因
Dec 17 Javascript
使用GruntJS构建Web程序之构建篇
Jun 04 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
jQuery动态移除和添加背景图片的方法详解
Mar 07 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
细说webpack源码之compile流程-rules参数处理技巧(1)
Dec 26 Javascript
vue中多个倒计时实现代码实例
Mar 27 Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 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之第八天
2006/10/09 PHP
jquery 学习之二 属性(类)
2010/11/25 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
Vuex 入门教程
2018/01/10 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Sublime开发python程序的示例代码
2018/01/24 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
python写入已存在的excel数据实例
2018/05/03 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python处理“
2019/06/10 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
Python实现直播推流效果
2019/11/26 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
财政专业求职信范文
2014/02/19 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
大学新生入学教育方案
2014/05/16 职场文书
2015入党自荐书范文
2015/03/05 职场文书