标签:其它 插件 www. mes 体验 底部 func swipe js插件
在做移动端开发的时候,经常会遇到内滚动与外滚动的问题,下面我对这方面好好的总结了一下,供以后开发时参考,相信对其他人也有用。
参考资料:关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别一览
关于移动端的内滚动和外滚动,有如下结论:
1.如果内滚动是外滚动的一部分,那么滚动的体验本身还是不错的。但有时需要在内滚动到顶部或者底部的时候不触发外滚动。
2.如果内滚动是一个弹层或者蒙版,这个时候体验就很差了,有时候我们需要不论在什么时候,内滚动都不触发外滚动。
对于问题2,一般是用swiper.js插件或者slimeScroll插件来解决的。
对于问题1,可以手动解决,下面说下解决思路。
所以有如下关系:
scrollHeight = clientHeight + scrollTop
如果没有边框的话,offsetheight = clientHeight,那么也有:
scrollHeight = offsetheight + scrollTop
根据上面的等式,可以判断滑块是否滑到顶部或者底部。
一般来说,pageY是通过event.pageY来获取的,但是对于有些版本的jquery,需要用下面的代码获取pageY:
event.originalEvent.targetTouches[0].pageY
那么检测顶部的逻辑是:
那么检测底部的逻辑是:
最后怎么来阻止滑动呢?用e.preventDefault()即可。
代码很好理解,就直接贴出来了:
//上下边缘检测
setScroll: (select) => {
let $ele = $(select),
eleStart;
$ele.on('touchstart', function(e) {
eleStart = e.originalEvent.targetTouches[0].pageY;
});
$ele.on('touchmove', function(e) {
let eleTouch = e.originalEvent.targetTouches[0].pageY - boxInfoStart,
scrollVal1 = $ele.scrollTop(),
scrollVal2 = $ele[0].scrollHeight - $ele[0].offsetHeight - $ele.scrollTop();
//向上滑到顶部
if(eleTouch>0 && scrollVal1 < 1) {
e.preventDefault();
}
//向下滑到底部
if(eleTouch<0 && scrollVal2 < 1) {
e.preventDefault();
}
});
},
上面的代码还可以用于解决,移动端拖动页面顶部或者底部会出现黑块,的问题。
标签:其它 插件 www. mes 体验 底部 func swipe js插件
原文地址:https://www.cnblogs.com/yangzhou33/p/9236577.html