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

/**
* 惯性原理:
* 产生的速度 = 移动距离 / 移动时间
* 距离 = 松开的坐标 - 上次的坐标 (距离差)
* 时间 = 松开的时间 - 按下的时间 (时间差)
* */ 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. SSIS - 7.发邮件任务

    发邮件任务在SSIS中使用特别多,当包执行失败或者有报错的时候可以用发邮件任务给管理员发邮件通知. 一.SMTP连接管理器 SMTP连接管理器是发邮件任务用来连接SMTP(Simple Mail Tr ...

  2. [Swift]LeetCode12. 整数转罗马数字 | Integer to Roman

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  3. [Swift]LeetCode161. 一次编辑距离 $ One Edit Distance

    Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串S和T,确定它们是否都是是一 ...

  4. 微信小程序入门(五)

    24.MINA框架讲解 MINA框架架构 25.小程序运行机制 小程序在首次打开的时间会比较长,后续再打开启动会很快,那么小程序是如何启动的呢? 运行机制-启动 冷启动 热启动 热启动:假入用户已经打 ...

  5. 7.Django CSRF 中间件

    CSRF 1.概述 CSRF(Cross Site Request Forgery)跨站点伪造请求,举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果某个用户已经登录到你的网站上了,那么当这个用 ...

  6. oracle 12C利用dbca建库13步

    oracle用户登录然后命令行执行:dbca 如果没有此命令可以用:find / -name "dbca"查到后执行. 1.选择Create a database 2.选择Adva ...

  7. Zara带你快速入门WPF(4)---Command与功能区控件

    前言:许多数据驱动的应用程序都包含菜单和工具栏或功能区控件,允许用户控制操作,在WPF中,也可以使用功能区控件,所以这里介绍菜单和功能区控件. 一.菜单控件 在WPF中,菜单很容易使用Menu和Men ...

  8. EF之Code First代码优先

    1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设 ...

  9. JS 中 原生方法 (一) --- 字符串

    目录 Javascript 中 str. arr.date.obj 等常见的原生方法总结 Javascript 中 str. arr.date.obj 等常见的原生方法总结 本文也说主要阐释了 Jav ...

  10. I-think-3

    一段很有哲理的话,与大家分享一下: 时光匆匆, 有些东西很重要,有些东西不重要, 有些东西已经不再重要,有些东西还是很重要. 宏观地看待人生,大学文凭只是一种达到目标的途径,而并非是唯一. 主要坚定自 ...