JavaScript实现移动端轮播效果

发布时间 - 2026-01-11 01:44:50    点击率:

这个轮播代码不是我自己所写,是偶然游览一个简友的主页看到的,今天刚看了事件,决定来逐行分析一下这个代码。首先,移动端与电脑端不同的是移动端只能通过触摸和手势来发生行为,所以我们要用到js中的与触摸操作有关的新事件。其实我们轮播的原理和以前相同,都是通过改变元素的位置来控制图片的出现,但让我们不是很上手的,是那些用于跟踪触摸的属性。

下面,我简单介绍一下与触摸相关的知识

触摸事件

  • touchstart:当手指触摸屏幕时触发,一只手指放在屏幕上也会触发
  • touchmove:当手指在屏幕上滑动时连续触发。在这个事件发生期间可以用preventDefault()可以阻止滚动。
  • touchend:手指从屏幕移开时触发。
  • touchcancel:当系统停止跟踪触发时触发。

上面这几个事件都会冒泡,也都可以取消。

属性

  • touches:表示当前跟踪的触摸操作的Touch对象的数组
  • targetTouches:特定于事件目标的Touch对象的数组。(简单点可以理解为手指触摸屏幕的位置)
  • changeTouches表示自上次触摸以来发生了什么改变的touch对象的数组。(手指离开的位置)

每个touch对象包括下列属性

  • clientX:触摸目标在视口中的x坐标
  • clientY:触摸目标在视口中的y坐标
  • identifier:标识触摸的唯一ID
  • pageX:触摸目标在页面中的x坐标
  • pageY:触摸目标在页面中的y坐标
  • screenX:触摸目标在页面中的x坐标
  • screenY:触摸目标在页面中的y坐标
  • target:触摸的dom节点目标

代码如下

<!DOCTYPE html>
<html>
<head>
 <title>移动端轮播</title>
 <style type="text/css">
  * {
   margin: 0;
   padding: 0;
  }
  #box {
   width: 980px;
   overflow: hidden;
   position: relative;
   margin: 0 auto;
  }
  #box ul {
   width: 4900px;
   height: 100px;
   position: relative;
   transform: translateX(-980px);
   
  }
  #box ul li{
   width: 980px;
   height: 100px;
   float: left;
   list-style-type: none;
   text-align: center;
   color: #fff;
   line-height: 100px;
   font-size: 30px;
  }
 </style>
 <script type="text/javascript">
  window.onload = function() {
   var box = document.getElementById('box');
   var oUl = document.getElementsByTagName('ul')[0];
   var aLi = oUl.children;//这样就可以把所有li标签获取到了
   var iNow = 1;
   var x = -iNow*aLi[0].offsetWidth;//li标签的位置
   var bReady = true;
   oUl.addEventListener('touchstart',function(ev){

    //当手指触摸屏幕的时候触发事件,让li的位置随手指滑动而改变
    if(bReady == false){return;}
    bReady = false; 
      
    var downX = ev.targetTouches[0].pageX; //记录触摸位置 
    var disX = downX - x;//下一个li要移动到的位置
    function fnMove(ev) {
     x = downX-disX;
     oUl.style.transform = 'translate3d('+x+'px,0,0)';
    }
    function fnEnd(ev){
     var upX = ev.changedTouches[0].pageX;//离开的位置
     if(Math.abs(upX - downX)>50){
      //左边移动
      if(upX - downX<0){
       iNow++;
       if(iNow==aLi.length){iNow=aLi.length-1;}
      }else{
      //右边移动
       iNow--;
       if(iNow==-1){iNow=0;}
      }
     }
     x = -iNow*aLi[0].offsetWidth;
     oUl.style.transform = 'translate3d('+x+'px,0,0)';
     oUl.style.transition = '200ms all ease';
     function tEnd(){
      if(iNow==4){
       iNow=1;
      }
      if(iNow==0){iNow=3;}
      oUl.style.transition = 'none'
      x = -iNow*aLi[0].offsetWidth;
      oUl.style.transform = 'translate3d('+x+'px,0,0)';
      bReady = true;
     } 
     oUl.addEventListener('transitionend',tEnd,false);
     //释放内存
     document.removeEventListener('touchend',fnEnd,false);
     document.removeEventListener('touchmove',fnMove,false);

    }
    document.addEventListener('touchmove',fnMove,false);
    document.addEventListener('touchend',fnEnd,false);
    //阻止默认事件
    ev.preventDefault();
   },false);

  }
 </script>
</head>
<body>
 <div id="box"> 
 <ul>
  <li style="background:green">3</li>
  <li style="background:orange">1</li>
  <li style="background:yellow">2</li>
  <li style="background:green">3</li>
  <li style="background:orange">1</li>
 </ul>
 </div> 
</body>
</html>

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


# js  # 移动端  # 轮播  # 原生js实现移动端触摸轮播的示例代码  # js实现移动端轮播图效果  # 支持移动端原生js轮播图  # 原生js图片轮播效果实现代码  # js原生实现移动端手指滑动轮播图效果的示例  # 的是  # 都是  # 口中  # 放在  # 看了  # 一只  # 也会  # 在这个  # 让我们  # 可以用  # 屏幕上  # 不是很  # 要用  # 也都  # 这几个  # 介绍一下  # 发生了什么  # 移开  # 所写  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何快速搭建虚拟主机网站?新手必看指南  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  中山网站制作网页,中山新生登记系统登记流程?  活动邀请函制作网站有哪些,活动邀请函文案?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  免费网站制作appp,免费制作app哪个平台好?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  javascript中闭包概念与用法深入理解  如何在搬瓦工VPS快速搭建网站?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel怎么判断请求类型_Laravel Request isMethod用法  如何在建站宝盒中设置产品搜索功能?  如何在新浪SAE免费搭建个人博客?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  php结合redis实现高并发下的抢购、秒杀功能的实例  java ZXing生成二维码及条码实例分享  如何快速生成ASP一键建站模板并优化安全性?  如何在云主机上快速搭建多站点网站?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  iOS UIView常见属性方法小结  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  JS中对数组元素进行增删改移的方法总结  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  高端云建站费用究竟需要多少预算?  如何在云指建站中生成FTP站点?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  网站图片在线制作软件,怎么在图片上做链接?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Android使用GridView实现日历的简单功能  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  黑客如何利用漏洞与弱口令入侵网站服务器?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  详解CentOS6.5 安装 MySQL5.1.71的方法  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何为API编写文档_Laravel API文档生成与维护方法  制作电商网页,电商供应链怎么做?  Python文件操作最佳实践_稳定性说明【指导】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体