移动端滚动插件iScroll

目录:

概述:

大家在日常工作中最常用的插件是什么,jQurey?Lazyload?但是这些都是在PC端,但是在移动端最常用的插件莫过于iScroll了,iScroll到底是什么东西,应该怎么用?iScroll是个很强大的插件,我也只是略懂皮毛,这里我们简单的介绍一下。

iScroll的产生:

iScroll的产生完全是因为移动版webkit浏览器,例如在iPhone,Android 的移动设备上。

iScroll的使用方法:

iScroll的原理是外层有一个溢出隐藏(overflow:hidden;)的DOM,然后这个区域内的第一个DOM结构会被实例化,其包裹的内容可以纵向或者横向的滚动,所以在使用iScroll的时候,滚动元素要尽量的简单,减少DOM个数,减少嵌套,因为DOM结构越是复杂iScroll运行起来就越是吃力,有可能会造成某些节点显示不正常的情况。 所以,推荐使用的DOM结构如下:
1
2
3
4
5
6
7
8
9
<div id="wrapper">//overflow:hidden;
    <ul>
    //只有第一个DOM结构(ul)被实例化,这个DOM可以纵向或者横向的滚动,
    //多出的内容会被wrapper的样式hidden。
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</div>
注意:再次重申,只有wrapper里的第一个子元素(ul)才可以被实例化滚动,并且要结合外层的DOM(wrapper)才能实现滚动。
如果 wrapper中有多个ul怎么办?很简单,记住那句话,只有wrapper里的第一个子元素(ul)才可以被实例化滚动:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="wrapper">//overflow:hidden;
    <div id="first">
        //只有第一个DOM结构(ul)被实例化,这个DOM可以纵向或者横向的滚动,
        //多出的内容会被wrapper的样式hidden
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
        <ul>
            <li>4</li>
            <li>5</li>
            <li>6</li>
        </ul>
    </div>
</div>
看到了吧,只有first会被实例化。 注意:这里第一个DOM结构的ID(first)可以不写,我只是为了方便大家识别才写了个ID,但是最外层的ID(wrapper)一定要写,因为在JS实例化的时候需要填写这个ID:
1
varmyScroll = newiScroll("wrapper");

iScroll应该如何实例化:

既然说道了实例化,我们应该在什么时候实例化?据说实例化的方法有很多,但是我没用过,我只说一种:
(1)在HTML(uw3c.html)页面底部(body之后html之前)加载iscroll.js与当前页面的uw3c.js,这样能确保HTML的DOM结构能加载出来。
(2)在JS插入页面DOM结构和数据之前实例化iScroll,也就是在JS的最开始实例化,因为之后可能会使用JS来插入DOM或者数据,这样以来能确保在插入数据之前iScroll已经实例化了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HTML://HTML结构
<html >
    <body>
     ...code...
    </body>
     //插入iscroll.js文件
   <script type="text/javascript"src="js/iscroll.js"> </script >
    //插入本页面JS文件
  <script type="text/javascript"src="js/uw3c.js"> </script >
</html>
 JS://JS文件内容
 varmyscroll;
 functioniscroll(data){
      //实例化iScroll
     myscroll=newiScroll("wrapper");
     pageData(data);
 }
 functionpageData(obj){
     $("body").html(obj);
     myscroll.refresh();//当DOM结构发生变化的时候,需要刷新iScroll
 }
 iscroll("<div>pagedata</div>");

iScroll中的参数:

在实例化iScroll的时候,可以传入两个参数,第一个参数是实例化的外层的DOM的ID,第二个参数是iScroll执行方法的对象:
1
varmyscroll=newiScroll("wrapper",{hScrollbar:false});
或者
1
2
3
4
5
6
varopts = {
                vScroll:false,//禁止垂直滚动
                snap:true,//执行传送带效果
                hScrollbar:false//隐藏水平方向上的滚动条
            };
varmyscroll = newiScroll("wrapper",opts);
第二个参数内容如下,这个参数会控制iScroll的效果:
1
2
3
4
5
6
7
8
9
10
11
hScroll       false禁止横向滚动 true横向滚动 默认为true
vScroll       false禁止垂直滚动 true垂直滚动 默认为true
hScrollbar    false隐藏水平方向上的滚动条
vScrollbar    false隐藏垂直方向上的滚动条
fadeScrollbar false指定在无渐隐效果时隐藏滚动条
hideScrollbar  在没有用户交互时隐藏滚动条 默认为true
bounce         启用或禁用边界的反弹,默认为true
momentum       启用或禁用惯性,默认为true
               此参数在你想要保存资源的时候非常有用
lockDirection false取消拖动方向的锁定,
               true拖动只能在一个方向上(up/down 或者left/right)

iScroll中的方法:

当然在第二个参数中,也有一些方法可以执行:
(1)scrollTo(x, y, time, relative)方法:传入4个参数:X轴滚动距离,Y轴滚动距离,效果时间,是否相对当前位置。所以例如:
1
2
3
4
//在200毫秒的时间内,Y轴向上滚动100像素;
uw3c.scrollTo(0, -100, 200)
//在200毫秒的时间内,相对于当前位置,X轴向左滚动100像素;
uw3c.scrollTo(-100, 0, 200, true)
(2)refresh()方法:在DOM结构发生改变之后,需要刷新iScroll,否则滚动插件会实例化的不准确:
1
uw3c.refresh();//刷新iScroll
(3)onPosChange,有没有一个方法能返回位置的变化?你可以查询一下自己所用的iScroll中有没有onPosChange方法:
1
2
3
4
5
6
7
8
onPosChange:function(x,y){
    if(y < -200){
     //如果Y周向上滚动200像素,$("#uw3c")就显示,否则就隐藏。
        $("#uw3c").show();
    }else{
        $("#uw3c").hide();
    }
}
(4)onScrollEnd:滚动结束时执行的事件,如果想在滚动结束时出发摸个事件,这个方法就拍上用处了:
1
2
3
4
//滚动结束后,执行的方法,滚动后会出现提示框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:销毁实例的回调。

还有几篇博文讲的特别好,附网址如下:
1、iscroll5中文API整理,用法与参考
   http://blog.csdn.net/ihetqxl/article/details/36538665
2、iscroll4升级到iscroll5全攻略笔记
  http://blog.csdn.net/gcz564539969/article/details/9156141
3、iscroll5+在ios、android点击(click)时间不兼容解决办法  http://www.52html5.com/?p=2618
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值