JS实现移动端的轮播图滑动事件

简介: JS实现移动端的轮播图滑动事件

在移动端实现轮播图滑动事件,我们通常使用 touchstarttouchmovetouchend 这三个事件。下面是一个基本的示例,展示了如何使用原生JavaScript来创建一个简单的移动端轮播图滑动效果:

HTML结构

<div id="carousel" class="carousel">  
    <div class="carousel-items">  
        <div class="carousel-item">Item 1</div>  
        <div class="carousel-item">Item 2</div>  
        <div class="carousel-item">Item 3</div>  
        <!-- 更多轮播项 -->  
    </div>  
</div>

CSS样式(简单示例,仅用于展示):

.carousel {  
    position: relative;  
    overflow: hidden;  
    width: 100%; /* 假设为全屏宽度 */  
    height: 200px; /* 根据需要设置高度 */  
}  
  
.carousel-items {  
    display: flex;  
    transition: transform 0.3s ease; /* 平滑过渡效果 */  
}  
  
.carousel-item {  
    flex: 0 0 100%; /* 初始每个轮播项占据全屏宽度 */  
    height: 100%;  
    display: flex;  
    align-items: center;  
    justify-content: center;  
    font-size: 2em;  
    background-color: #f0f0f0;  
    margin-right: 10px; /* 用于模拟间隙,实际中可能使用其他方法 */  
}

JavaScript代码

let carousel = document.getElementById('carousel');  
let carouselItems = carousel.querySelector('.carousel-items');  
let currentX = 0; // 记录手指当前位置  
let startX = 0; // 记录手指开始位置  
let isMoving = false; // 是否正在移动  
let carouselWidth = carouselItems.getBoundingClientRect().width; // 轮播图总宽度  
let itemWidth = carousel.querySelector('.carousel-item').getBoundingClientRect().width; // 单个轮播项宽度  
  
carousel.addEventListener('touchstart', function(e) {  
    startX = e.touches[0].clientX;  
    isMoving = true;  
});  
  
carousel.addEventListener('touchmove', function(e) {  
    if (!isMoving) return;  
    currentX = e.touches[0].clientX - startX;  
    // 根据滑动距离更新轮播图位置  
    carouselItems.style.transform = `translateX(-${currentX}px)`;  
});  
  
carousel.addEventListener('touchend', function(e) {  
    isMoving = false;  
    // 判断滑动方向并进行相应的处理(例如切换到下一张或上一张)  
    if (currentX > itemWidth / 4) { // 假设滑动超过1/4个轮播项宽度则切换  
        // 切换到下一张(需要编写逻辑)  
    } else if (currentX < -itemWidth / 4) {  
        // 切换到上一张(需要编写逻辑)  
    }  
    // 重置轮播图位置  
    carouselItems.style.transform = `translateX(0)`;  
});

注意:以上代码是一个基础示例,用于展示如何使用触摸事件来创建一个简单的滑动效果。在实际应用中,你可能需要添加更多的功能和优化,例如:

  • 滑动动画的平滑处理(使用requestAnimationFrame)。
  • 边界检查,确保轮播图不会滑出边界。
  • 添加指示器(例如小圆点)来显示当前显示的轮播项。
  • 自动播放功能。
  • 滑动到指定轮播项的功能。
  • 更好的滑动体验(例如,惯性滑动)。

对于更复杂的需求,你可能需要考虑使用现成的轮播图库,如Swiper、Slick等。

相关文章
|
4月前
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
57 3
|
26天前
|
JavaScript 前端开发 测试技术
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
35 3
|
2月前
|
JavaScript
时尚简洁的js轮播图特效插件
这是一款时尚简洁的js轮播图特效插件。该轮播图采用es6语法制作,底部带缩略图和描述信息。图片和描述信息在切换时同步滑动。
|
3月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
87 5
|
3月前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
178 6
|
4月前
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
79 6
|
4月前
|
前端开发
js-基础轮播图制作
js-基础轮播图制作
41 7
|
4月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
243 0
|
4月前
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
72 0
|
JavaScript 前端开发 容器
JavaScript响应式轮播图插件–Flickity
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w178191520/article/details/84181790 简介 flickity是一款自适应手机触屏滑动插件,它的API参数很丰富,包括对齐方式、循环滚动、自动播放、是否支持拖动、是否开启分页、是否自适应窗口等。
1547 0

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    52
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62