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

/**
* 惯性原理:
* 产生的速度 = 移动距离 / 移动时间
* 距离 = 松开的坐标 - 上次的坐标 (距离差)
* 时间 = 松开的时间 - 按下的时间 (时间差)
* */ 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框架中<constructor-arg>与<property>理解

    配置文件的根元素是beans,每个组件使用bean元素来定义,bean元素可以有许多属性,其中有两个是必须的:id和class.id表示组件的默认名称,class表示组件的类型. 依赖注入的方式:  ...

  2. AIO系列文档(2)----TIO使用

    AIO系列文档(1)----图解ByteBuffer中介绍了ByteBuffer用法,下面通过介绍t-io介绍如何使用: hello world例子简介 本例子演示的是一个典型的TCP长连接应用,代码 ...

  3. Go变量逃逸分析

    目录 什么是逃逸分析 为什么要逃逸分析 逃逸分析是怎么完成的 逃逸分析实例 总结 写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程 ...

  4. [Swift]LeetCode483. 最小好进制 | Smallest Good Base

    For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...

  5. [Swift]LeetCode754. 到达终点数字 | Reach a Number

    You are standing at position 0 on an infinite number line. There is a goal at position target. On ea ...

  6. [Swift]LeetCode756. 金字塔转换矩阵 | Pyramid Transition Matrix

    We are stacking blocks to form a pyramid. Each block has a color which is a one letter string, like ...

  7. Node.js 种子下载器

    Node.js 种子下载器 庆祝 2018 国庆,制作了一个 Node.js 的种子下载器.爬取页面,根据页面的链接,破解另外一个网站,下载种子文件.项目比较简单,爬取页面没有使用任何爬虫框架.项目源 ...

  8. ubuntu 16.04 更改默认Python版本

    一般Ubuntu默认的Python版本都为2.x, 如何改变Python的默认版本呢?假设我们需要把Python3.5设置为默认版本: 首先查看Python默认版本: ubuntu@user~$:py ...

  9. 当使用vue的按键修饰符不起效果的时候怎么办?如@keyup.enter = '' ;

    这个问题困扰了我一个多小时,各种测bug !始终测不出来! 直接上代码(错误示范) <el-form-item prop="password"> <el-inpu ...

  10. Dockerfile指令介绍

    FROM:指定基础镜像 在Dockerfile中FROM是必备的指令,用于指定基础的镜像. FROM centos:latest LABEL:指定镜像标签 LABEL指令用来指定镜像的标签. 格式: ...