大家在日常工作中最常用的插件是什么,jqurey?lazyload?但是这些都是在pc端,但是在移动端最常用的插件莫过于iscroll了,iscroll到底是什么东西,应该怎么用?iscroll是个很强大的插件,我也只是略懂皮毛,这里我们简单的介绍一下。
iscroll的产生:
iscroll的产生完全是因为移动版webkit浏览器,例如在iphone,android 的移动设备上。
iscroll的使用方法:
iscroll的原理是外层有一个溢出隐藏(overflow:hidden;)的dom,然后这个区域内的第一个dom结构会被实例化,其包裹的内容可以纵向或者横向的滚动,所以在使用iscroll的时候,滚动元素要尽量的简单,减少dom个数,减少嵌套,因为dom结构越是复杂iscroll运行起来就越是吃力,有可能会造成某些节点显示不正常的情况。 所以,推荐使用的dom结构如下:
//overflow:hidden; //只有第一个dom结构(ul)被实例化,这个dom可以纵向或者横向的滚动, //多出的内容会被wrapper的样式hidden。 1 2 3
注意:再次重申,只有wrapper里的第一个子元素(ul)才可以被实例化滚动,并且要结合外层的dom(wrapper)才能实现滚动。
如果 wrapper中有多个ul怎么办?很简单,记住那句话,只有wrapper里的第一个子元素(ul)才可以被实例化滚动:
//overflow:hidden; //只有第一个dom结构(ul)被实例化,这个dom可以纵向或者横向的滚动, //多出的内容会被wrapper的样式hidden 1 2 3 4 5 6
看到了吧,只有first会被实例化。 注意:这里第一个dom结构的id(first)可以不写,我只是为了方便大家识别才写了个id,但是最外层的id(wrapper)一定要写,因为在js实例化的时候需要填写这个id:
var myscroll = new iscroll(wrapper);
iscroll应该如何实例化:
既然说道了实例化,我们应该在什么时候实例化?据说实例化的方法有很多,但是我没用过,我只说一种:
(1)在html(uw3c.html)页面底部(body之后html之前)加载iscroll.js与当前页面的uw3c.js,这样能确保html的dom结构能加载出来。
(2)在js插入页面dom结构和数据之前实例化iscroll,也就是在js的最开始实例化,因为之后可能会使用js来插入dom或者数据,这样以来能确保在插入数据之前iscroll已经实例化了。
html://html结构
...code... //插入iscroll.js文件 //插入本页面js文件
js://js文件内容
var myscroll; function iscroll(data){ //实例化iscroll myscroll=new iscroll(wrapper); pagedata(data); } function pagedata(obj){ $(body).html(obj); myscroll.refresh();//当dom结构发生变化的时候,需要刷新iscroll } iscroll(pagedata
);
iscroll中的参数:
在实例化iscroll的时候,可以传入两个参数,第一个参数是实例化的外层的dom的id,第二个参数是iscroll执行方法的对象:
var myscroll=new iscroll(wrapper,{hscrollbar:false});或者var opts = { vscroll:false,//禁止垂直滚动 snap:true,//执行传送带效果 hscrollbar:false//隐藏水平方向上的滚动条 };var myscroll = new iscroll(wrapper,opts);
第二个参数内容如下,这个参数会控制iscroll的效果:
hscroll false 禁止横向滚动 true横向滚动 默认为truevscroll false 禁止垂直滚动 true垂直滚动 默认为truehscrollbar false隐藏水平方向上的滚动条vscrollbar false 隐藏垂直方向上的滚动条fadescrollbar false 指定在无渐隐效果时隐藏滚动条hidescrollbar 在没有用户交互时隐藏滚动条 默认为truebounce 启用或禁用边界的反弹,默认为truemomentum 启用或禁用惯性,默认为true,此参数在你想要保存资源的时候非常有用lockdirection false取消拖动方向的锁定,true拖动只能在一个方向上(up/down 或者left/right)
iscroll中的方法:
当然在第二个参数中,也有一些方法可以执行:
(1)scrollto(x, y, time, relative)方法:传入4个参数:x轴滚动距离,y轴滚动距离,效果时间,是否相对当前位置。所以例如:
//在200毫秒的时间内,y轴向上滚动100像素;uw3c.scrollto(0, -100, 200)//在200毫秒的时间内,相对于当前位置,x轴向左滚动100像素;uw3c.scrollto(-100, 0, 200, true)
(2)refresh()方法:在dom结构发生改变之后,需要刷新iscroll,否则滚动插件会实例化的不准确:
uw3c.refresh();//刷新iscroll
(3)onposchange,有没有一个方法能返回位置的变化?你可以查询一下自己所用的iscroll中有没有onposchange方法:
onposchange:function(x,y){ if(y < -200){ //如果y周向上滚动200像素,$(#uw3c)就显示,否则就隐藏。 $(#uw3c).show(); }else{ $(#uw3c).hide(); }}
(4)onscrollend:滚动结束时执行的事件,如果想在滚动结束时出发摸个事件,这个方法就拍上用处了:
//滚动结束后,执行的方法,滚动后会出现提示框alert(uw3c.com)onscrollend:function(){ alert(uw3c.com);}
(5)onrefresh:在dom结构发生改变之后,需要刷新iscroll,否则滚动插件会实例化的不准确,onrefresh是刷新完iscroll会执行的方法。
(6)onbeforescrollstart:开始滚动前的时间回调,默认是阻止浏览器默认行为 。
(7)onscrollstart:开始滚动的回调。
(8)onbeforescrollmove:在内容移动前的回调。
(9)onscrollmove:内容移动的回调。
(10)onbeforescrollend:在滚动结束前的回调。
(11)ontouchend:手离开屏幕后的回调。
(12)ondestroy:销毁实例的回调。
以上就是本文的全部内容,希望对大家熟练使用iscroll.js移动端滚动条插件有所帮助。