位置: 编程技术 - 正文

Hammer.js+轮播原理实现简洁的滑屏功能(轮播怎么实现)

编辑:rootadmin

推荐整理分享Hammer.js+轮播原理实现简洁的滑屏功能(轮播怎么实现),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:轮播的设置,轮播器html,轮播实现,轮播器html,轮播器html,轮播的设置,轮播器html,请问轮播,内容如对您有帮助,希望把文章链接给更多的朋友!

最近有个任务,做一个非常小的h5的应用,只有2屏,需要做横向的全屏滑动切换和一些简单的动画效果,之前做这种东西用的是fullpage.js和jquery,性能不是很好,于是就想自己动手弄一个简单的东西来实现。最后我用zepto + hammer.js 和轮播的方式解决了这个问题,效果还不错,整个页面不开启Gzip时所有资源请求的数据大小为KB左右。这篇文章总结下这个方法的实现思路。

效果演示:

1. 实现要点

1)滑屏借鉴bootstrap的carousel插件,不过完全没有它那个复杂,只需要借鉴它的轮播实现思路即可;

2)滑屏切换的触发,跟PC不一样,PC通常都是通过元素的点击回调来触发,对于滑屏的页面,完全可以利用window的hashchange事件来处理,这样只要通过超链接设置锚点或者通过js改变location.hash就能触发切换;

3)考虑到移动还得支持手势操作,可以使用hammer.js这个手势库,API非常简单易用;

4)动画效果可以用animate.css,不过不用把它所有的代码都弄到代码里,只需要拷贝需要的动画效果相关的代码即可;

5)替代jquery,首选zepto;

6)滑屏效果使用transition动画,为了能够响应动画结束的回调,可以考虑使用transition.js,这个也是Bootstrap提供的工具,不过它默认只能跟jquery使用,要对它稍微改变一下才能跟zepto联合使用。

这些要点说的比较粗糙,后面的内容会一一详细介绍。

2. html结构

空的滑屏页的html结构是这样的:

html,

.container与.page初始化的时候采用绝对定位,全屏布局。每一个section.page代表一页,并且默认不显示,所有页的定位都相同,也就是说如果所有页都显示的话,这些页会重叠在一块。

demo页的html结构是:

demo相关的css就不展示了。其中animated是应用animate.css需要的,animate.css是一个动画库,github上有。

3. 滑屏切换的实现思路

滑屏切换就是通过js控制2个要滑动的页增加和删除以下定义的这一些css类实现的:

.page--active表示当前显示的页,页面初始化后,通过以下js调用,给第一页加上.page—active:

这样页面默认就显示了第一页。以向左滑屏说明这些css的使用原理:

第一步,找到下一页的section,添加page--next类,将它定位当前页的右边,为滑屏做准备;

第二步,找到当前页的section,给它添加page--active-left,由于这个类改变了translate3D属性的值,所以当前页会往左滑动一屏;

在第二步的同时,给下一页的section,添加page--next-left,由于这个类改变了translate3D属性的值,所以下一页会往左滑动一屏;

Hammer.js+轮播原理实现简洁的滑屏功能(轮播怎么实现)

第三步,在当前页跟下一页滑屏动画结束后,找到原来的当前页,移除掉page--active和page--active-left类;

在第三步的同时,找到下一页,移除掉page--next和page--next-left类,添加page--active。

gif图说明如下:

向右滑屏原理类似:

第一步,找到上一页的section,添加page--prev类,将它定位当前页的左边,为滑屏做准备;

第二步,找到当前页的section,给它添加page--active-right,由于这个类改变了translate3D属性的值,所以当前页会往右滑动一屏;

在第二步的同时,给上一页的section,添加page--prev-right,由于这个类改变了translate3D属性的值,所以上一页会往右滑动一屏;

第三步,在当前页跟上一页滑屏动画结束后,找到原来的当前页,移除掉page--active和page--active-right类;

在第三步的同时,找到上一页,移除掉page--prev和page--prev-right类,添加page--active。

综合以上实现原理,封装成JS函数如下:

由于$activePage在页面初始化的时候默认指定为第一页,在每次滑屏结束后都会更新成最新的当前页,所以调用的时候只要把目标页的ID传给slide函数即可。以上代码可能会有疑问的是:

1)$targetPage[0].offsetWidth的作用,这个代码用来触发浏览器的重绘,因为目标页原来是display: none的,如果不触发重绘的话,下一步添加css类后将看不到动画效果;

2)$.transitionEnd.end以及emulateTransitionEnd的作用,这个在下一部分说明。

4. 浏览器css动画结束的回调及模拟

bootstrap提供了一个工具,transition.js,用来判断浏览器是否支持css动画回调事件,以及在浏览器没有在动画结束后自动触发回调的特殊情况下通过模拟的方式来手动触发回调,原先这个工具只能配合jquery使用,为了在zepto中使用,必须稍微改变一下,下面就是改变之后的代码:

$.transitionEnd.end表示当前浏览器支持的动画结束事件的名称。$.fn.emulateTransitionEnd是一个扩展了Zepto原型的一个方法,传入一个动画的过渡时间,当这个时间段过完之后,如果浏览器没有自动触发回调事件,called就始终是false,setTimeout会导致callback被调用,然后callback内部就会手动触发动画结束的回调。为什么要通过这个方式来模拟动画结束,是因为浏览器即使支持动画结束事件的回调,但是有些时候并不会触发这个事件,或者在动画结束后不能立即触发,影响回调的准确性。传入的duration应该与执行动画的元素,在css上设置的transtion-duration相同,注意以下代码中标黄的部分:

5. hashchange事件

PC端滑屏都是给元素添加点击事件触发的,移动端可以利用window的hashchange事件:

hashchange事件,在js代码中通过改变loaction.hash或者是点击<a href="#page-2" title="">下一页</a>这样的超链接时,都会触发,所以只要在这个事件的回调去做滑屏切换即可。这样那些上一页和下一页的链接元素都不用加事件了。

6. hammer.js使用简介

hammer.js是一个手势库,支持常用的手势操作,使用简单,引入它的js之后,通过以下的方式来支持手势滑屏:

把整个container元素作为滑屏的stage,监听到swipeleft事件,就表示向左滑,页面应该显示下一页;监听到swiperight事件,就表示向右滑,页面应该显示下一页。

7. 结束语

animate.css的使用就不详细介绍了,比较简单,这是它的github地址:

javascript实现瀑布流加载图片原理 讲一下大概的原理吧,还是先上图:功能描述:根据不同菜单的属性值分别加载不同的数据下拉滚动条到一定位置预加载图片,滚动条拉到最底下的时

JavaScript实现的SHA-1加密算法完整实例 本文实例讲述了JavaScript实现的SHA-1加密算法。分享给大家供大家参考,具体如下:/****SecureHashAlgorithm(SHA1)*

原生js实现图片层叠轮播切换效果 本文实例介绍了js焦点图片层叠轮播切换滚动效果,分享给大家供大家参考,具体内容如下效果图:功能描述:自定义图片尺寸;每隔一段时间自动滚动

标签: 轮播怎么实现

本文链接地址:https://www.jiuchutong.com/biancheng/381704.html 转载请保留说明!

上一篇:JavaScript实现的MD5算法完整实例(javascript的dom)

下一篇:javascript实现瀑布流加载图片原理(js debounce实现)

  • 什么是虚开增票
  • 实物折扣的增值税
  • 出口退税进项税
  • 上缴非税收入前是否要交税
  • 转让不动产销项税
  • 食堂开支计入什么科目
  • 企业计提福利费时,贷记应付职工薪酬
  • 收到样品费计入什么科目
  • 进口关税完税价格
  • 安徽附加税优惠政策
  • 房租增值税专用发票和普通发票的税率
  • 小微企业免征增值税报表填写
  • 小规模企业资本结构
  • 每月收到融资租赁费利息发票
  • 小型微利企业年度汇算清缴报哪些报表
  • 公司房产税如何征收税率
  • 合同成本如何设一级科目
  • 固定资产转入清理记账凭证
  • 系统托盘右键
  • PHP:xml_error_string()的用法_XML解析器函数
  • 小规模开普票后怎么报增值税
  • php实现ping功能
  • postman如何设置token
  • php必背知识点
  • 购入材料的实际成本
  • 存货损失账务处理新规定
  • 多开发票可以作废吗?
  • 委托加工业务的组成计税价格
  • 监事 兼职
  • php常见的错误级别
  • grid-column
  • 细说php
  • php大于等于号怎么打
  • 租用办公设备
  • HTML+CSS+JS+Jquery+练手项目+...合集(前端学习必备,持续更新中...)
  • 一阶段目标检测算法
  • 处置抵债资产的账务处理
  • 中国源码亲测网
  • 帝国cms商城教程
  • 弥补亏损的会计分录是怎样的
  • 计提加计抵减额在财务报表里哪里体现
  • 长期债权投资业务处理
  • 工业总产值和收入产值哪个大
  • 股东分红是否必须由公司代扣
  • 个人独资企业增值税免征额
  • 理解的近义词
  • sqlserver触发器在哪个位置
  • 固定资产可以一次性折旧吗
  • 应付账款的主要舞弊形式
  • 以前年度的费用发票怎么入账
  • 出口退税没有及时申报
  • 只有销售才能使你成功的名言
  • 外购货物会计分录
  • 库存商品发出计价测试
  • fedora安装xorg
  • windows已保护你的电脑,阻止你的应用
  • centos7软件
  • 三星笔记本预装win8改win7好吗
  • 老毛桃2013 U盘启动盘和重装系统图文教程
  • 通过修改注册表修改edge主页
  • xp的开始菜单
  • os x yosemite dp5下载地址 os x 10.10 dp5更新内容
  • diskgenius分区linux
  • window10怎样格式化u盘
  • mac如何备份到icloud
  • centos6.5怎么安装
  • win8笔记本无法更新正在撤销更改
  • javascript访问用户cookie
  • css display:none使用注意事项小结
  • 使用NGUI时遇到物理引擎错误
  • jquery获取input内容
  • andriod 控件
  • js简单代码
  • shell脚本中获取参数
  • linux 打包
  • 命令适用于
  • 天津2023防暑降温费标准文件
  • 一个人可以申请
  • 进项税小于销项税
  • 铜陵职业技术学院专业
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设