下面代码只是实现了上下滑动惯性,没有写水平滑动惯性。(临时代码笔记,可能会在以后的过程中不断更新优化代码)

/**
* 惯性原理:
* 产生的速度 = 移动距离 / 移动时间
* 距离 = 松开的坐标 - 上次的坐标 (距离差)
* 时间 = 松开的时间 - 按下的时间 (时间差)
* */ var dargFun = {
dargDom:null, //惯性滑动的DOM区域
startX:0, //开始偏移的X
startY:0, //开始偏移的Y
clientX:0,
clientY:0,
translateX:0, //保存的X偏移
translateY:0, //保存的Y偏移
maxWidth:0, //滑动的最大宽度
maxHeight:0, //滑动的最大高度
startTime:0, //记录初始按下时间
init:function(config){
this.dargDom = document.querySelector(config.dargDom);
this.maxWidth = this.dargDom.offsetWidth;
this.maxHeight = this.dargDom.offsetHeight; this.dargDom.addEventListener('touchstart',(event)=>{
event.stopPropagation(); //停止事件传播
this.clientX = event.changedTouches[0].clientX;
this.clientY = event.changedTouches[0].clientY;
this.dargDom.style.WebkitTransition = this.dargDom.style.transition = '';
this.startX = this.translateX;
this.startY = this.translateY;
this.startTime = Date.now();
},false); this.dargDom.addEventListener('touchmove',(event)=>{
if(document.documentElement.scrollTop >= this.dargDom.scrollHeight - this.dargDom.clientHeight){ }else{
return;
} event.stopPropagation(); //停止事件传播
this.translateX = event.changedTouches[0].clientX - this.clientX + this.startX;
this.translateY = event.changedTouches[0].clientY - this.clientY + this.startY;
if(this.translateY > 0 ){ //拖动系数. 拉力的感觉
this.translateY *= 0.4;
}else if( this.translateY < -(this.dargDom.scrollHeight - this.dargDom.clientHeight)){
this.translateY = (event.changedTouches[0].clientY - this.clientY) * 0.4 + this.startY;
}
this.animate(this.translateY);
},false); this.dargDom.addEventListener('touchend',(event)=>{
event.stopPropagation(); //停止事件传播
var distanceY = event.changedTouches[0].clientY - this.clientY,
timeDis = Date.now() - this.startTime, //时间差
speed = (distanceY / timeDis) * 100; // 惯性
this.translateY += speed; this.translateY = 0;
// 添加贝塞尔曲线
this.dargDom.style.WebkitTransition = this.dargDom.style.transition = 'transform 500ms cubic-bezier(0.1, 0.57, 0.1, 1)';
this.animate(this.translateY); },false); },
animate:function(y){
this.dargDom.style.WebkitTransform = this.dargDom.style.transform = 'translateY('+y+'px)';
}
} export default dargFun;

注:当滑动到页面底部的时候才触发touchmove事件。

调用方式:

dragFun.init({
dargDom:'#contractContanier'
});

参考地址:


HTML5移动端拖动惯性的更多相关文章

  1. HTML5移动端图片左右切换动画

    插件描述:HTML5移动端图片左右切换动画 小海今天要给大家分享一款很不错的图片左右切换焦点图动画,并且支持移动端触摸滑动.功能上,这款HTML5图片播放器支持鼠标滑动.手机端触摸滑动以及自动播放.外 ...

  2. html5 移动端单页面布局

    序     移动端的web网页使用的是响应式设计,但一般我们看到的网站页面都是跳转刷新得到的,比如通过点击一个menu后进入到另一个页面 今天来说下是移动端的单页面的布局.单页面就是一切操作和布局都是 ...

  3. 第九十一节,html5+css3pc端固定布局,完成首页

    html5+css3pc端固定布局,完成首页 此时我们的首页就完成了 首页效果 其他页面我就不做了,原理相同,做其他页面时将头尾css分离调用即可 大纲算法 我们看看大纲算法比较清晰,说明符合规则 h ...

  4. 第九十节,html5+css3pc端固定布局,底部区域,说明区域,版权区域

    html5+css3pc端固定布局,底部区域,说明区域,版权区域 完成: HTML代码: <!--尾部--> <footer class="wei-bu"> ...

  5. 第八十九节,html5+css3pc端固定布局,热门旅游取,标题介绍区,旅游项目区

    html5+css3pc端固定布局,热门旅游取,标题介绍区,旅游项目区 样式: html代码: <!--主体--> <section class="zhu-ti" ...

  6. 第八十八节,html5+css3pc端固定布局,搜索区,插入大图,搜索框

    html5+css3pc端固定布局,搜索区,插入大图,搜索框 设置一个div作为搜索区域 1.宽度为百分之百 2.最小宽度为1263,因为要考虑到手机,等小屏幕缩小后宽度会自适应,导致破坏布局,将最小 ...

  7. 第八十七节,html5+css3pc端固定布局,大纲算法,section和div,结构分析

    html5+css3pc端固定布局,大纲算法,section和div,结构分析 一.大纲算法 在HTML5中有一个很重要的概念,叫做HTML5 大纲算法(HTML5Outliner),它的用途是为用户 ...

  8. 第八十六节,html5+css3pc端固定布局,网站结构,CSS选择器,完成导航

    html5+css3pc端固定布局,网站结构,CSS选择器,完成导航 页面采用1280的最低宽度设计,去掉滚动条为1263像素. 项目是PC端的固定布局,会采用像素(px)单位. 网站结构语义 在没有 ...

  9. html5移动端页面分辨率设置及相应字体大小设置的靠谱使用方式

    对于html5移动端网页编写CSS网上有很多介绍的文章,但在实际使用过程中还是会纠结. 网上的资料太多,且大多都是技术介绍型,特别是针对android上,网上写的各种麻烦,各种复杂,各种不接地气儿.. ...

随机推荐

  1. Spring源码工程导入Eclsipse缺少两个jar文件

    按照<Spring源码深度解析>所述,使用gradle cleanidea eclipse将Spring源码转为eclipse工程后,导入eclipse,最后发现还是缺少spring-cg ...

  2. Hibernate4集成spring4报错----No Session found for current thread

    在编写一个Hibernate4集成spring4的小demo的时候出现了该错误: org.hibernate.HibernateException: No Session found for curr ...

  3. 写书好累 <HTTP抓包实战>终于出版

    我的新书<HTTP抓包实战>终于开始在京东销售了.内容是关于HTTP包,Fiddler抓包,JMeter发包,适合任何IT工程师阅读.我将自己十年所学的知识,融会贯通总结为一本书.阅读后肯 ...

  4. [Swift]LeetCode47. 全排列 II | Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  5. [Swift]LeetCode103. 二叉树的锯齿形层次遍历 | Binary Tree Zigzag Level Order Traversal

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  6. IP地址个数的计算原理

    IP注释: IP地址(Internet Protocol Address),缩写为IP Adress,是一种在Internet上的给主机统一编址的地址格式,也称为网络协议(IP协议)地址. 它为互联网 ...

  7. [MV] - You Give REST a Bad Name

    本首歌改自Bon Jovi经典歌曲"You Give Love a Bad Name". 改编的作者是Dylan Beattie, 他是Spotlight的系统架构师. 改编后的歌 ...

  8. synchronize 关键字原理

    众所周知 synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象. 同步静态方法,锁的是当前 Class 对象. 同步块,锁的是 () 中的对象 ...

  9. SqlServer突破亿级数据操作瓶颈(出处:转载)

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  10. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...