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如何编写单元测试和功能测试?(PHPUnit示例)
如何快速重置建站主机并恢复默认配置?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
如何在七牛云存储上搭建网站并设置自定义域名?
什么是javascript作用域_全局和局部作用域有什么区别?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何在服务器上三步完成建站并提升流量?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel如何创建自定义中间件?(Middleware代码示例)
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
微信小程序 五星评分(包括半颗星评分)实例代码
如何注册花生壳免费域名并搭建个人网站?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Laravel如何使用Blade模板引擎?(完整语法和示例)
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
香港服务器部署网站为何提示未备案?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
bing浏览器学术搜索入口_bing学术文献检索地址
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
北京网站制作公司哪家好一点,北京租房网站有哪些?
Laravel如何优化应用性能?(缓存和优化命令)
深圳网站制作的公司有哪些,dido官方网站?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
java中使用zxing批量生成二维码立牌
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
如何为不同团队 ID 动态生成多个“认领值班”按钮
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
新三国志曹操传主线渭水交兵攻略
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Python文件异常处理策略_健壮性说明【指导】
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Laravel如何使用模型观察者?(Observer代码示例)
Laravel如何实现一对一模型关联?(Eloquent示例)
如何在IIS7上新建站点并设置安全权限?
长沙做网站要多少钱,长沙国安网络怎么样?
深圳网站制作培训,深圳哪些招聘网站比较好?
Android中AutoCompleteTextView自动提示
HTML 中动态设置元素 name 属性的正确语法详解

