Touchslide 触屏轮播工具
GB.Touchslide 是支持鼠标、触摸屏和触控笔的轻量轮播工具。它提供水平与垂直平移、淡入淡出和缩放三类特效,并支持循环播放、自动播放、导航、分页、前后按钮及切换回调。
安装与引入
浏览器直接引入
<script src="https://cloud.m775.net/js/touchslide.js"></script>
npm 项目
npm i @gentbo/touchslide
import '@gentbo/touchslide';
快速开始
主容器需要包含一个内容层,内容层的直接子元素就是轮播项。建议显式设置内容选择器,避免页面结构与默认值不一致。
<div id="banner">
<div class="slides">
<article>第一页</article>
<article>第二页</article>
<article>第三页</article>
</div>
</div>
<script>
GB.Touchslide('#banner')
.content('.slides')
.translate()
.start();
</script>
主容器必须具有可用的宽度和高度。推荐由主容器定义可视尺寸,内容层及轮播项使用 width: 100% 和 height: 100%。初始化会生成可视层,并调整内容层及轮播项的行内样式。
完整轮播示例
<div id="gallery">
<div class="slides">
<figure><img src="1.jpg" alt=""></figure>
<figure><img src="2.jpg" alt=""></figure>
<figure><img src="3.jpg" alt=""></figure>
</div>
<button class="prev" type="button">上一页</button>
<button class="next" type="button">下一页</button>
<ol class="nav"></ol>
<span class="paging">
<b class="index"></b> / <b class="total"></b>
</span>
</div>
<script>
GB.Touchslide('#gallery')
.content('.slides')
.nav('.nav', 'on', true)
.prev('.prev')
.next('.next')
.paging('.paging .index', '.paging .total')
.loop()
.auto(3000)
.delay(240)
.before((index, total) => console.log('开始', index, total))
.after((index, total) => console.log('完成', index, total))
.start();
</script>
内容、导航与分页
.content(selector)设置内容层;它的直接子元素会作为轮播项。初始默认选择器为 .slider。.nav(selector, onClass?, autoPage?)设置导航容器、当前项类名及自动分页。autoPage 为 true 时自动创建与轮播项等量的导航项。.paging(index, total)设置当前页和总页数元素;页码从 1 开始显示。自动分页时,如果导航容器是 ul 或 ol,将生成 li;其他容器会生成 span。导航项支持点击切换。
特效、循环与自动播放
.translate(horizontal = true)平移特效。true 为水平切换,false 为垂直切换;不传参数时默认水平切换。.left()translate(true) 的兼容入口,水平跟手滑动;自动播放时向左移动。.top()translate(false) 的兼容入口,垂直跟手滑动;主容器需要明确高度。.fade()淡入淡出特效,轮播项原位叠放,支持横向滑动触发切换。.zoom()缩放淡入特效,轮播项原位叠放,支持横向滑动触发切换。.loop()启用无缝循环。只有一个轮播项时,循环和自动播放会自动关闭。.auto(ms = 2500)启用自动播放并设置间隔,单位为毫秒;非正数会恢复为 2500ms。.delay(ms = 200)设置单次切换动画时长,单位为毫秒;非正数会恢复为 200ms。translate 会让内容跟随手指移动;fade 和 zoom 只使用横向滑动判断上一页或下一页,动画不会跟随手指变化。页面进入后台时自动播放会暂停,页面重新可见后恢复。非循环自动播放到最后一项后停止;用户手动滑动后也不会继续自动播放。
// 水平平移(默认)
GB.Touchslide('#gallery').content('.slides').translate().start();
// 垂直平移
GB.Touchslide('#gallery').content('.slides').translate(false).start();
// 淡入淡出
GB.Touchslide('#gallery').content('.slides').fade().loop().auto(3000).start();
// 缩放淡入
GB.Touchslide('#gallery').content('.slides').zoom().loop().auto(3000).start();
按钮与边界状态
.prev(selector, stopClass?)绑定上一页按钮;非循环模式到达第一页时添加 stopClass,默认 prevStop。.next(selector, stopClass?)绑定下一页按钮;非循环模式到达最后一页时添加 stopClass,默认 nextStop。GB.Touchslide('#gallery')
.content('.slides')
.prev('.prev', 'disabled')
.next('.next', 'disabled')
.start();
切换回调
.before(callback)动画开始时执行 callback(index, total)。.after(callback)CSS 过渡结束时执行 callback(index, total)。index 是从 1 开始的当前页码,total 是轮播项总数。首次无动画初始化不会调用这两个回调。
启动与使用边界
.start()完成 DOM 调整、事件绑定及首次渲染。.run()start() 的兼容入口。同一个 DOM 元素只能创建一个 Touchslide 实例,且同一实例只能启动一次;重复初始化或重复启动会抛出错误。调用 start() 前必须保证目标元素与内容层已经存在。
工具优先使用 Pointer Events,不支持时回退为鼠标事件。初始化还会监听窗口尺寸变化并自动重新计算轮播尺寸。