博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原生js实现元素随手指滑动上下滚动
阅读量:5332 次
发布时间:2019-06-15

本文共 1670 字,大约阅读时间需要 5 分钟。

想要实现的效果是在hidden中的子元素detail高度是由内容决定的。有可能会超出父元素的100px,就会被隐藏,这里实现手指滑动屏幕使detail可以根据滑动上下滚动,显示出隐藏部分。

需要监听的元素detail

  

我们想要实现的效果是手指触摸到屏幕->手指滑动屏幕->滑动完成,元素滚动。这个滑动的距离就是detail需要滚动的距离。

计算这个距离是比较关键的点。我们需要一个变量来保存开始点。还需要保存一些关键的计算值,如滚动距离等。

var optionsY = "";  //开始点 var trans = 0; //滚动距离 var height = document.getElementById("detail").clientHeight; //detail的高度 var fatherHeight = document.getElementById("hidden").clientHeight; //hidden的高度

获取开始点时是监听元素的屏幕触摸时间touchstart。注意这里没有驼峰写法。

document.getElementById("detail").addEventListener("touchstart",function(data){   optionsY = data.touches[0].pageY; //保存开始点Y轴位置})

当手指触摸屏幕时,调用返回函数。从返回的data里面取touches[0],这就是当前我们触摸的点。pageY就是触摸点的y轴坐标。初始点保存完成。

下一步就是根据滑动距离滚动元素。监听元素的屏幕滑动事件touchmove。 

document.getElementById("detail").addEventListener("touchmove",function(data){   var pageY = data.touches[0].pageY;  //获取结束点Y轴位置   trans = trans + pageY - optionsY;   //获取滚动距离,滚动距离是叠加的,所以要保存滚动距离。每次的滚动距离等于保存的滚动距离加上这次滑动的距离。比如我们每次滑动距离都是向下滑动10px,元素向下滚动10px。那么10次过后这个元素距离应该就是向下滚动了100px,而不是滚动了10px。 不管是向上还是向下,都加加起来赋给details就可以啦   if(0-trans>= height - fatherHeight){         trans = 0 - height + fatherHeight        }  //但是details元素滚动距离也是有限制的。向上大于0时不能往上滚了,向下大于它的高度时也不能往下滚了。当然为了更好的体验程度,可以适当放宽距离。这里最大向下滚动距离为details的高度减去它的父元素的高度。   if(trans>=0){      trans = 0;   }   document.getElementById("detail").style.transform = 'translateY('+trans+'px)';//这里设置元素的滚动距离。   optionsY = pageY   //由于touchMove是手指一直触摸就会一直触发,如果开始点一直不变,滚动距离就是这样子的。第一次滑动时,就会累加很多次的滑动距离。举个例子,开始点10,从10滑到20,触发了10次的touchMove时间(举例,不止10次) ,滑动距离就是0+1+2...+10;于是就需要把每次的结束点存当做下一次的开始点。这样子,还是还是上面那个例子就回事0+1+1+1..+1,这样滚动的距离才是我们想要的。})

 

转载于:https://www.cnblogs.com/chenxiaohu/p/10939422.html

你可能感兴趣的文章
HDU 1983 BFS&&DFS
查看>>
c++开源项目汇总
查看>>
python yield返回多个值
查看>>
每日站立会议及今日份任务
查看>>
R12 付款过程请求-功能和技术信息 (文档 ID 1537521.1)
查看>>
洛谷 4364 [九省联考2018]IIIDX
查看>>
洛谷 3870 [TJOI2009]开关
查看>>
【牛客-16643】统计数字(简单排序)
查看>>
www.aaa.com/index.html跳转www.aaa.com设置
查看>>
ssdb binlog机制 存疑
查看>>
Vue 2.0 组件库总结
查看>>
HDU5033 Building(单调栈)
查看>>
Kafka 安装配置 及 简单实验记录
查看>>
想成为程序猿?28个程序员专供在线学习网站(转)
查看>>
font-style: oblique文字斜体,display:inline-block显示间隙
查看>>
css设置滚动条并显示或隐藏
查看>>
【leetcode❤python】13. Roman to Integer
查看>>
常用关于 JavaScript 中的跨域访问方法
查看>>
织梦万能调用LOOP标签!
查看>>
asp.net MVC helper 和自定义函数@functions小结
查看>>