IScroll 实践指南(上)

来源:互联网 发布:淘宝怎样买百度云资源 编辑:程序博客网 时间:2024/05/20 13:15
之所以iscroll会诞生,主要是因为无论是在iphone、ipod、android 或是更早前的移动webkit都没有提供一种原生的方式来支持在一个固定高度的容器内滚动内容。 
这个不幸的规则导致所有web-app要模拟成app的样子时,只能由一个绝对定位的header 或是footer再加上一个可以内容的滚动的中间区域组成。 
幸运的是移动webkit提供了一种强大的硬件加速的CSS属性,这个属性可以用来模拟这个缺失的功能,Iscroll从这里开始了前进之路,但是没有不带刺的玫瑰。让内容滚动像原生方式一般比想象中要难 

iscroll官网 
iscroll例子 

截至到笔者发布这篇文章时,通过样式: 
Java代码  收藏代码
  1. overflow:scroll;  
  2. -webkit-overflow-scrolling:touch;  

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

iScroll 使用起来很简单,首先你需要一个合理的DOM结构: 
Java代码  收藏代码
  1. <div id="wrapper">  
  2.     <ul id="scroll">  
  3.         <li></li>  
  4.         ...  
  5.         ...  
  6.     </ul>  
  7. </div>  

其次是推荐的样式: 
Java代码  收藏代码
  1. #wrapper {  
  2.     position:relative;  
  3.     z-index:1;  
  4.     width:/* your desired width, auto and 100% are fine */;  
  5.     height:/* element height */;  
  6.     overflow:/* hidden|auto|scroll */;  
  7. }  

官方推荐这样的结构,因为iscroll只能滚动wrapper里的第一个子节点,或者说唯一一个子节点才能使得iscroll正确的生效。因为这个节点需要一个绝对定位的CSS属性,更重要的是这个节点里所包裹的内容有了一个统一的容器,我们只需要计算之后修改这个容器的属性值就可以达到我们滚动的效果。 

iscroll 需要两个参数,第一个很简单就是外容器的id,第二个参数是一个参数对象。 
通过这个对象可以传入iscroll的各项参数来配置iscroll。 
他的参数基本分为四个部分 

  • 基础
  • 滚动条
  • 放大缩小
  • 事件回调
以下由笔者整理的iScroll参数以及其代表的意思: 
Java代码  收藏代码
  1. hScroll: true//是否水平滚动  
  2. vScroll: true//是否垂直滚动  
  3. x: 0//滚动水平初始位置  
  4. y: 0//滚动垂直初始位置  
  5. bounce: true//是否超过实际位置反弹  
  6. bounceLock: false//当内容少于滚动是否可以反弹,这个实际用处不大  
  7. momentum: true//动量效果,拖动惯性  
  8. lockDirection: true,  
  9. //当水平滚动和垂直滚动同时生效时,当拖动开始是否锁定另一边的拖动  
  10. useTransform: true//是否使用CSS形变  
  11. useTransition: false//是否使用CSS变换  
  12. topOffset: 0//已经滚动的基准值(一般情况用不到)  
  13. checkDOMChanges: false//是否自动检测内容变化    

checkDOMChanges 这个不是十分靠得住,因为他目前是轮询检测offsetWidth、offsetHeight,然后才去调自身的refresh 重新计算滚动区域,但是有时候只检测这个不是很准.. 
Java代码  收藏代码
  1. // Scrollbar 的相关参数  
  2. hScrollbar: true//是否显示水平滚动条  
  3. vScrollbar: true//同上垂直滚动条  
  4. fixedScrollbar: isAndroid, //对andriod的fixed  
  5. hideScrollbar: isIDevice,  //是否隐藏滚动条  
  6. fadeScrollbar: isIDevice && has3d, //滚动条是否渐隐渐显  
  7. scrollbarClass: ''//字定义滚动条的样式名  

通过scrollbar这些参数可以配置iscroll的滚动条,通过scrollbarClass可以自己定义一套滚动条的样式。 
Java代码  收藏代码
  1. // Zoom 放大相关的参数  
  2. zoom: false//默认是否放大  
  3. zoomMin: 1//放大的最小倍数  
  4. zoomMax: 4//最大倍数  
  5. doubleTapZoom: 2//双触放大几倍  
  6. wheelAction: 'scroll'//鼠标滚动行为(还可以是zoom)  

这个Zoom我觉得比较好用,对于一个固定显示图片区域的类似应用,可以非常简单的做到固定滚动,包括两指放大的应用。 
wheelAction 这个参数是给PC的鼠标滚动定义的,可以定义为滚动鼠标滚轮放大。 
Java代码  收藏代码
  1. // 自定义 Events 的相关参数   
  2. onRefresh: null//refresh 的回调,关于自身何时调用refresh 后面会继续谈到  
  3. onBeforeScrollStart: function (e) { e.preventDefault(); },   
  4. //开始滚动前的时间回调,默认是阻止浏览器默认行为  
  5. onScrollStart: null//开始滚动的回调  
  6. onBeforeScrollMove: null//在内容移动前的回调  
  7. onScrollMove: null//内容移动的回调  
  8. onBeforeScrollEnd: null, 在滚动结束前的回调  
  9. onScrollEnd: null//在滚动完成后的回调  
  10. onTouchEnd: null//手离开屏幕后的回调  
  11. onDestroy: null//销毁实例的回调  
  12. onZoomStart: null,  
  13. onZoom: null,   
  14. onZoomEnd: null  

通过了解以上参数,你可以非常容易的配置自己的iscroll 应用: 
你可以通过onScrollEnd 事件回调在结束滚动后执行一段你自己的代码 
你也可以简单的新建一个可以通过双触放大的固定滚动区域。 
你也可以什么都不做,只是简单的约定碰到边界是否反弹,等等。 
Java代码  收藏代码
  1. var myscroll = new iScroll('wrapper', {  
  2.      hScroll: false//是否水平滚动  
  3.      vScroll: true//是否垂直滚动  
  4.      y: 10//滚动垂直初始位置  
  5.      bounce : false  
  6. });  

当然,在使用时,如果对创建的iscroll 实例保存引用会有很多好处: 
你可以在内容改变时,DOM结构发生改变时调用 myscroll.refresh() 来重新计算固定滚动区域的内容高度,从而使得你的iscroll工作正常。 
你也可以在你的应用结束时,用过这个引用调用destroy方法来,销毁这个iscroll 实例 
等等.... 
当然,iscroll提供的Api也是非常丰富,所以我们可以通过使用iscroll来做很多webapp的应用,下一篇文章我将会主要介绍一下iscroll的公用调用方法,以及参数的控制。 

转载请注明原文出处:http://qbaty.iteye.com/blog/1221061
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 申请退款后如果不想退了怎么办 世纪明德申请退款但不想退了怎么办 天猫申请换货商家不换怎么办 乐视手机刷机不想清除数据怎么办 捡的苹果手机刷机了要id怎么办 苹果6plus玩王者荣耀卡怎么办 华为荣耀3c的手机内存不足怎么办 红米4x玩王者荣耀卡怎么办 华为手机荣耀10一直重启怎么办 荣耀9青春版老自动重启怎么办 手机开不开机停在华为界面怎么办 华为荣耀9老是反复的重启怎么办 华为荣耀4x老是反复的重启怎么办 手机更新系统后开不了机怎么办 荣耀畅玩7x没有4g网络怎么办 华为4x数字解锁不对中怎么办 华为手机需要解锁后才能刷机怎么办 畅玩6x锁屏壁纸黑了怎么办 指纹密码解锁的手机解不开了怎么办 客户说物流太慢了要退货怎么办 天猫买的手机商家不给发票怎么办 天猫超市下单付款后缺货怎么办 淘宝卖家填写假的单号不发货怎么办 天猫商家72小时未发货怎么办 天猫精灵方糖不按顺序播放怎么办 在天猫购物已付款不发货怎么办 淘宝退货商家收到货不退款怎么办 被有实名认证的闲鱼卖家骗了怎么办 我收到了方正的提示函怎么办 淘宝刷q币单被骗了怎么办 中通快递已签收但是东西丢了怎么办 手机不版本低不支持微信下载怎么办 淘宝虚拟商品不支持7天退货怎么办 卖虚拟物品遇到恶意退款买家怎么办 淘宝极速退款后卖家拒绝退款怎么办 我的天猫积分不让换券了怎么办 微信手机话费充错了怎么办 自己进货在淘宝卖被投诉假货怎么办 京东买的电器售后后服务差怎么办 京东到家申请退款卖家不处理怎么办 天猫买了假货商品下架了怎么办