`

【转】iscroll是什么?

阅读更多

iscroll是什么? 

iscroll.js是Matteo Spinelli开发的一个js文件,使用原生js编写,不依赖与任何js框架。旨在解决移动webkit系浏览器的区域滚动问题,兼容mobile safari、android默认浏览器、safari、chrome、firefox5+、opera11+、IE9+及其他webkit核心浏览器。最新版本为iscroll4。 

官方网站:iscroll4 

iscroll的用武之地 

1.区域滚动 

我们在pc端web开发中,有时会用固定某一区域的宽度和高度,然后使用overflow:auto,使其内容在该区域内滚动。 

iphone默认浏览器(mobile safari)也支持固定区域的滚动,但必须双指滑动操作,而且没有滚动条。mobile safari中的单指滑动只针对页面级别,不针对页面元素。这样的操作体验很麻烦,而且很多用户根本不知道双指能够区域滑动。 

android自带浏览器也支持区域滚动,且可以单指滑动操作,但是滑动起来卡的半死半活,很不流畅。 

使用iscroll,可以完美解决上述问题了,不仅可以在iphone和android上单指滑动,而且滑动起来流畅之极,酣畅淋漓。滑动过程中也有漂亮的滚动条提示,让你舒心不已。 

2.固定定位 

固定定位不是iscroll的原生用法,而是使用iscroll协助解决固定定位问题。 

话说iphone很先进,但就是不支持position:fixed。这下苦了我们了,固定定位怎么解决啊,我们会经常遇到固定标题栏、固定工具栏等情况啊!! 

使用iscroll协助解决:首先获取浏览器窗口高度;然后获取固定工具栏的高度;接着将除固定工具栏之外的内容全部放在一个固定区域内,该固定区域的高度=窗口高度-工具栏高度;之后对固定区域使用iscroll。这样,整个html页面的高度正好等于窗口高度,页面级别不会出现滚动,工具栏就一直固定在当前的位置。在固定区域内滑动,可以查看页面其他内容,不会影响工具栏的定位。 


鼠标滚轮滚动 

iscroll支持在pc端浏览器中使用鼠标滚轮控制区域滚动,但操作起来很不灵敏。这是由于iscroll对鼠标滚轮事件做了拦截,然后缩小了滚轮的滚动距离,详见iscroll4.js源代码608-609行: 

wheelDeltaX = e.wheelDeltaX / 12;//控制X轴鼠标滚轮速度 
wheelDeltaY = e.wheelDeltaY / 12;//控制Y轴鼠标滚轮速度 
    iscroll将每次的滚轮距离缩小为系统默认距离的12分之一,难怪滚起来很慢,感觉不灵敏。只需要将12改成1,滚轮的滚动速度就恢复正常了。你也可以根据实际需要设置成其他值。 
输入框聚焦不灵敏、无法选择文字 

    使用了iscroll之后,你会发现点击输入框时不灵敏,经常无法聚焦;页面文字也无法选择和复制。这是由于iscroll要监听鼠标事件和触摸事件来进行滚动,所以禁止了浏览器的默认行为,详见源代码92行: 
onBeforeScrollStart: function (e) { e.preventDefault(); }, 
iscroll不分青红皂白,禁止了浏览器的一切默认行为,导致上述问题。所以我们需要稍作修改: 
onBeforeScrollStart: function (e) { 
var target = e.target; 
while (target.nodeType != 1) target = target.parentNode; 
if (target.tagName != ‘SELECT’ && target.tagName != ‘INPUT’ && target.tagName != ‘TEXTAREA’) 
e.preventDefault(); 
}, 
    判断触发事件的元素是不是input、select、textarea等表单输入类元素,如果不是就阻止默认行为。这样保证了输入类元素能正确快速聚焦。 
在上述修改中追加一个条件 target.tagName != ‘body’或者直接将onBeforeScrollStart修改为null,即可做到鼠标选取文字,但这样的修改会导致iscroll滚动失效或不灵敏,所以无法选取文字这个问题先放一边吧。如你有更好的方法,欢迎回复。 
select元素操作不灵敏或操作后白屏 

    使用iscroll后,还有一个较麻烦的问题,就是select元素点击不灵敏(滚动之后点击select,经常无响应);有时点击有反应了,下拉菜单显示却错位(pc端);选择一项之后,页面直接变成了空白(iphone、android中)或者页面位置向上偏离,滚动区域位置出现偏离。 
    说白了,就是导致select没法用。为此我调试了很久,最后发现了问题所在:iscroll默认使用的是css的transform变形中的translate3d实现区域滚动,每次滚动实际是改变translate3d中的y轴值,实际的dom位置并没有发生变化。translate3d会导致页面的焦点错误,系统级下拉菜单的显示则会导致其出现显示偏离。 
    控制滚动模式的代码在67行:useTransform: true。好在iscroll提供了另一种滚动方式,基于绝对定位位置变化的滚动。修改为useTransform: false之后,iscroll就会使用对定位位方式来实现滚动,该方式是我们在web开发中模拟动画的最常用方式,滚动之后dom的实际位置也同步发生了变化,不会出现错位偏离现象。 
    在pc端主流浏览器、iphone、android2.2下测试,select问题完美解决。 
    不过需要注意,使用对position决定定位后,滚动区的宽度默认会自适应内容宽度,而不是父元素的100%,所以最好将滚动区域宽度设为100%。 
美中不足 

    iscroll是小而精的经典作品,名字也带着apple范。但唯一美中不足的是,只能使用id调用。

分享到:
评论

相关推荐

    iScroll 5 API 中文版

    iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件。 它可以在桌面,移动设备和智能电视平台上工作。它一直在大力优化性能和文件大小以便在新旧设备上提供最顺畅的体验。 iScroll不仅仅是 滚动...

    iscroll 下拉 上拉 刷新

    iscroll 下拉刷新 上拉刷新 非常好用的前台工具 可以实现 向下拉 然后ajax加载数据

    HTML5 移动端 UI框架 Mobile Angular UI.zip

    Mobile Angular UI 集成了:Angular 1.2 Bootstrap 3Angular 的 Bootstrap 3 指令集一系列重要的移动端 Bootstrap 3 组件 (navbars, sidebars, switches ..)FontAwesome 图标特性:iScroll 的可滚动区域滑出/滑入侧...

    jq头像图片旋转放大剪裁.rar

    利用iscroll-zoom.js,hammer.js,lrz.all.bundle.js,jquery.photoClip.js和jq文件对上传图片进行放大,缩小,旋转,裁剪操作。主要用于解决手机端客户上传头像时,不同手机不同拍摄角度,会出现头像是倒的或者横的...

    Listloading.js移动端上拉下拉刷新组件

    主要依赖于iscroll.js v5.1.2基础上开发的组件,基础库可以使用jquery.js或者zepto.js操作dom节点,目前我是使用了zepto.js作为基础库操作dom,以jquery插件的形式存在。如果不想以插件方式使用,则只需要把...

    详解CSS3开启硬件加速的使用和坑

    最近在看在github上看iscroll的文档。虽然是英文的,但是为了装逼,没办法硬着头皮看完了,觉得作者写得不错(我有那么好耐心写那么长的文档就好了[捂脸]),然后为了更好地装逼,有看了一遍,其中是发现了不少好...

    【千锋】Web前端项目精讲视频(29集)

    千锋Web前端教程:26-27.iscroll实战(2集) 千锋Web前端教程:23-25.ionic-spa应用实战(3集) 千锋Web前端教程:19-22.微信开发扫一扫(4集) 千锋Web前端教程:16-18.音乐播放器(3集) 千锋Web前端教程:10-14....

    blog-demo:博客演示

    一、前端webrtc基础 —— 录音篇利用webrtc进行声音录制,转成pcm文件、wav文件,canvas画音域图,文件播放掘金地址:二、自定义H5 video 播放器基于HTML5标签实现的一个自定义视频播放器。其中实现了播放暂停、进度...

    JqueryMobile项目实战Demo

    1、给新手提供较完整的学习Demo 2、iscroll与ajax跳转的结合使用。 3、IOS Theme与JQM的结合使用。 4、带参数跳转的实现。 5、JQM Swipe的使用。 6、JQM Ajax Slide转屏效果。 7、上拉/下拉刷新效果。

    骨干响应式CSS3-Page-Transitions:针对流畅布局进行了优化CSS3硬件加速页面过渡

    骨干响应式CSS3页面过渡 将响应* CSS3页面过渡添加到主干...: me@badass: ~ $ bower install backbone.responsiveCSS3transitions外挂程式iScroll4插件插件可在与v0.3 +兼容的插件有助于确保页面过渡始终加载滚动到顶

    egjs-flicking::recycling_symbol_selector:每天有三千万人在体验。 可靠,灵活且可扩展的转盘

    // 每天有3000万人的经验。 它是可靠,灵活和可扩展的轮播。 :mobile_phone: :laptop_computer: :desktop_computer: 翻译: 支持的框架 :computer_mouse_selector: 单击每个图像以查看其来源或查看我们的。...

Global site tag (gtag.js) - Google Analytics