web app开发利器 - iscroll4 解决方案

简介:
  • 存在即是道理,iscroll会诞生,主要是因为无论是在iphone、ipod、android 或是更早前的移动webkit都没有提供一种原生的方式来支持在一个固定高度的容器内滚动内容,
  • 这个不幸的规则导致所有web-app要模拟成app的样子时,只能由一个绝对定位的header 或是footer再加上一个可以内容的滚动的中间区域组成。
  • 幸运的是移动webkit提供了一种强大的硬件加速的CSS属性,这个属性可以用来模拟这个缺失的功能,Iscroll从这里开始了前进之路,但是没有不带刺的玫瑰。让内容滚动像原生方式一般比想象中要难
  • 兼容万恶的IE6一样,作者希望通过写一个控件,让所有web浏览器支持这种滚动,于是iscroll4应运而生。

在解决了兼容性的问题之外,它还提供了需求许多交互的解决方案,如:

    (1)缩放(Pinch/Zoom)

    (2)拉动刷新(Pull up/down to refresh)

    (3)速度和性能提升

    (4)精确捕捉元素

    (5)自定义滚动条

IOS5 已经能够支持区域滚动了。但是andriod4 还是不行..

overflow:scroll;  
-webkit-overflow-scrolling:touch;

 

已知的兼容bugs

 

区域滚动

  • 安卓的2x. 元素不支持 overflow:scroll (android自带浏览器) 4.x以上都支持
  • ios 5以下好像也不支持

固定定位:

  • 话说iphone很先进,但就是不支持position:fixed, 真奇葩

实际项目开发中使用iscroll遇到的问题:

大概说下解决的方案,你不一定遇到,遇到了至少有个参考~

  • iscroll支持在pc端浏览器中使用鼠标滚轮控制区域滚动,但操作起来很不灵敏
  • 在iscroll4的滚动容器范围内,点击input框、select等表单元素时没有响应
复制代码
onBeforeScrollStart : function(e){ e.preventDefault(); },
    这一行,iSroll禁止了事件的默认行为,导致select,option,textarea等元素无法点击。
     解决方法也很简单,只需做一下判断,如下:

onBeforeScrollStart : function(e){
  var nodeType = e.explicitOriginalTarget ? e.explicitOriginalTarget.nodeName.toLowerCase() : (e.target ? e.target.nodeName.toLowerCase() : '');
  if(nodeType != 'select' && nodeType != 'option' && nodeType != 'input' && nodeType != 'textarea'){
     e.preventDefault();
  }
},
复制代码
  • 这样只要你touch的元素是 select || option || input || textarea时,它就不会执行e.preventDefault(),默认的事件就不会被屏蔽了

 


 

  • 往iscroll容器内添加内容时,容器闪动的bug                              (实际遇到了,已解决)
    • 做上拉加载更多内容的时候,肯定需要把新的内容插入到容器内,这时发现有时容器会出现闪动,一开始认为是insert进去的内容太多,后来又觉得是不是因为里面布局用了float的原因导致重新渲染,最后通通排除
    • has3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix()
    • has3d = false
    • 和在配置iscroll时,useTransition设置成false就可以了(useTransition默认是false的)。

 


 

 

  • 过长的滚动内容,导致卡顿和app直接闪退 (实际遇到了,已解决)
    • 说白了iscroll都是用js+css3实现的,对浏览器的消耗肯定是可观的,避免无限制的内容加载本身就是web产品应该避免的。
    • 假如无可避免,我们可以尽量减低iscroll对浏览器内存的消耗
    • 1)不要使用checkDOMChanges。虽然checkDOMChanges很方便,定时检测容器长度是否变化来refresh,但这也意味着你要消耗一个Interval的内存空间
    • 2)隐藏iscroll滚动条,配置时设置hScrollbar和vScrollbar为false。
    • 3)不得已的情况下,去掉各种效果,momentum、useTransform、useTransition都设置为false

 


 
在手机中做滑动条,有几百条下啦列表的是时候,上下滑动爆卡(实际遇到了,已解决)
  • 检查原因发现跟布局有很大的关系,布局的子元素li都用了绝对定位,去掉就OK了,有此可见定位也是会影响能行滴

 


 

左右滚动时,不能正确响应正文上下拉动                                  (实际遇到了,已解决)

  • 在做这种效果时 ,假如这个幻灯片模块只是你页面的一部分,你还需要上下拉动页面去浏览其它内容时,你的手指在这个模块上做上下拨动时,恐怕会没有反应。原因还是和问题1一样的,因为屏蔽了默认事件。
  • 完美的解决方法是没有的,如果把 e.preventDefault() 去掉,幻灯片的滚动效果就会大打折扣,而且有时用户上下拨动的操作会被误操作成幻灯片的滚动。所以在效果还是体验上,大家还是自己选择吧。在技术上解决不了的问题,我认为还是多和产品和UI沟通比较好,共同协商一个良好的方案。

 


 

  • 4.1.9版本中,mouseout事件,2次触发end事件                        (实际遇到了,已解决)

            呵呵,这个我改了源码,添加了一个flag处理的,具体在

复制代码
_start 方法中
that.swipe = false;

_mouseout 方法中
        _mouseout:function (e) {
            var t = e.relatedTarget;    

            if(this.swipe){
                return;
            }
复制代码

 


  • 4.1.9版本中,preventDefault没有妥善处理,导致svg不可选的问题 (实际遇到了,已解决)

如图把  打字累了

QQ20130620233427_thumb

 

附上:运用webkit绘制渲染页面原理解决iscroll4闪动的问题

本文转自艾伦 Aaron博客园博客,原文链接:http://www.cnblogs.com/aaronjs/p/3147470.html,如需转载请自行联系原作者


相关文章
|
2月前
|
人工智能 文字识别 小程序
旅游社用什么工具收报名 + 资料?不开发 App 也能自动收集信息
本文探讨了旅游行业中报名信息收集的常见痛点及解决方案,重点介绍了二维码表单工具在提升信息收集效率、简化操作流程方面的优势。通过对比多种工具,分析其适用场景与实际应用逻辑,为一线旅游从业者提供高效、低成本的执行参考。
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
3月前
|
IDE 开发工具 开发者
使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件
# 使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件 #鸿蒙开发工具 #DevEco Studio
294 1
|
3月前
|
人工智能 小程序 JavaScript
【一步步开发AI运动APP】十、微调优化内置运动分析器,灵活适配不同的应用场景
本文介绍了如何通过【一步步开发AI运动APP】系列博文,利用`ISportOptimizer`对内置运动分析器进行微调优化。相比小程序,APP框架(如uni-app)因技术差异,无法直接修改运动分析器参数,因此提供了统一的优化机制。开发者可通过`ISportOptimizer`获取和更新检测规则、动作样本等,灵活适应不同场景需求,如全民运动赛事的宽松模式或学生体测的严格模式。文中还提供了示例代码,展示如何对具体运动项目(如仰卧起坐)进行优化。需要注意的是,微调优化适用于标准动作的小范围调整,若动作变化过大(如花式跳绳),可期待后续自定义扩展功能。
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:银行App
仓颉语言银行App项目分享,页面布局采用List容器,实现沉浸式体验与模块化设计。顶部资产模块结合Stack与Row布局,背景图与内容分离,代码清晰易懂;功能按钮部分通过负边距实现上移效果,圆角仅保留顶部;热门推荐使用header组件,结构更规范。整体代码风格与ArkTS相似,但细节更灵活,适合金融类应用开发。
|
4月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
257 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
3月前
|
安全 新制造
不用开发APP,也能实现设备巡检自动提醒和记录归档
设备巡检新方案!告别纸质表格,用二维码轻松搞定自动提醒和记录归档。某工厂分享如何通过草料二维码实现一物一码、扫码填写巡检信息,自动生成数据归档,还能设置定期提醒,确保巡检任务按时完成。无需额外开发 App,低成本高效管理,为设备巡检提供简单又实用的解决方案。
|
4月前
|
人工智能 JavaScript 前端开发
借助 CodeBuddy,我轻松开发出三分钟读书 App
借助 CodeBuddy,我轻松开发出三分钟读书 App
104 6
|
4月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。

热门文章

最新文章