当前位置: 首页 > Web前端 > HTML5

使用iscroll4可能遇到的问题(参考:记录)

时间:2023-04-05 20:18:26 HTML5

1。在iscroll4的滚动容器范围内,点击输入框、select等表单元素无响应。出现这个问题的原因是iscroll需要一直监听用户的触摸操作。为了灵敏地做出相应的效果,它屏蔽了其余的默认事件。解决方法是在iscroll4的源码中找到这一行,onBeforeScrollStart:function(e){e.preventDefault();}然后将其更改为:onBeforeScrollStart:function(e){varnodeType=e.explicitOriginalTarget?e.explicitOriginalTarget.nodeName.toLowerCase():(e.target?e.target.nodeName.toLowerCase():'');if(nodeType!='select'&&nodeType!='option'&&nodeType!='input'&&nodeType!='textarea')e.preventDefault();这样,只要你触摸的元素是select||选项||输入||textarea,不会执行e.preventDefault(),默认事件是不会被阻塞的。如果你有其他不想被屏蔽的元素,可以自己修改,但是需要注意的是onBeforeScrollStart中的默认事件是屏蔽的。它是iscroll平滑滚动的基础。不要随便去掉,否则你会发现滚动很卡pause。2.向iscroll容器添加内容时,容器闪烁。当我做上拉加载更多内容时,肯定需要往容器中插入新的内容。这时候我发现有时候容器会闪烁。一开始以为是insert里面的内容太多,后来又想到是布局里面用了float导致重新渲染,最后排除。其实重点是iscroll使用了过于高级的CSS3属性,而webkit可能对这些属性支持不够好。涉及的两个属性是translate3d和TransitionTimingFunction。可能这两个属性在列表长度变化的时候会影响渲染,所以页面会闪烁。解决办法是找到源代码。has3d='WebKitCSSMatrix'inwindow&&'m11'innewWebKitCSSMatrix()更改为:has3d=false并且在配置iscroll时,将useTransition设置为false(useTransition默认为false)。这样做的一个缺陷是滚动没有以前那么流畅了(原来的效果真的可以和原来的app媲美),但是如果不对比,你是看不出来的。在效果和体验之间选择,我更看重体验。但是,如果你满足以下条件,我还是不建议你像我一样修改:1)即使你不修改,不管你怎么往iscroll容器里面插入内容,它都不会闪烁。这种情况多发生在纯文本列表中。如果列表涉及复杂的布局和图片,经常会出现闪烁的错误。2)如果您的网络应用程序只是在移动浏览器上浏览。translate3d和TransitionTimingFunction只是在IOS中uiwebview的支持还不成熟,但是在手机上的safari是没有问题的,所以如果你不是使用phonegap这样的框架开发hybridapp的话,不用担心这个问题.3)只针对android,因为android的webkit还不支持translate3d,iscroll会自动选择不使用。3.滚动内容过长导致卡顿,应用直接崩溃。说白了,iscroll是用js+css3实现的,对浏览器的消耗肯定是相当大的。避免无限制的内容加载本身就是一个应该避免的网络产品。如果实在无法避免,我们可以通过iscroll尽量减少对浏览器内存的消耗1)不要使用checkDOMChanges。checkDOMChanges虽然很方便,定时检测容器长度是否变化来刷新,但是也意味着你需要消耗一个Interval的内存空间。2)隐藏iscroll滚动条,配置时将hScrollbar和vScrollbar设置为false。3)不得已,去除各种效果,将momentum、useTransform、useTransition设置为false4、左右滚动时,文字无法正确响应上下拉动。做这个效果的时候,如果滑动模块只是你页面的一部分,当你还需要上下滚动页面浏览其他内容的时候,手指在这个模块上上下移动的时候,可能没有反应。原因还是和问题1一样,因为默认事件是阻塞的。没有完美的解决方案。如果去掉e.preventDefault(),幻灯片的滚动效果会大大降低,有时用户上下翻动的操作会被误认为是滚动幻灯片。所以无论是效果还是体验,大家还是自己选择吧。对于技术上解决不了的问题,我觉得还是多跟产品和UI沟通,一起协商好的解决方案比较好。基本经验就是这些pull,希望对大家有所帮助。(改变)