码迷,mamicode.com
首页 > 其他好文 > 详细

关于isScroll如何使用

时间:2016-08-04 21:08:16      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

      isScroll是用原生javascript写的实现局部滚动的一个库,它不依赖任何第三方框架。设计的初衷是为了解决移动webkit系浏览器的区域滚动问题,兼容safari、chrome、firefox5+、opera11+、IE9+及其他webkit核心浏览器。现已更新到isScroll5.

      我们采用官网(http://iscrolljs.com/)推荐的html结构来举例:

 1 <div class="wrapper">
 2     <ul>
 3         <li>1</li>
 4         <li>2</li>
 5         <li>3</li>
 6         <li>4</li>
 7         <li>5</li>
 8         <li>6</li>
 9         <li>7</li>
10         <li>8</li>
11         <li>9</li>
12         <li>10</li>
13         <li>11</li>
14         <li>12</li>
15     </ul>
16     <br/>
17 </div>

     下面是对应的css部分:

.wrapper{
            position:relative; //这个属性必须写,可以为relative或absolute。原因见js部分
            margin:50px auto; //上下50px的margin, 水平居中
            height:650px;   //必须设定scrollbar容器的高度,只有当内容高度超过容器高度的时候,才会显示scrollbar
            width:200px;
            overflow:hidden; //当父容器高度不足时,只有通过滚动条才能看到超出的内容
            background:#eee;
        }
        ul{
            margin:0;
            padding:0; //去掉ul默认的样式
            list-style:none;
        }

        ul li{
            border:1px solid #ccc;
            height:50px;//所有的li高度加起来超过650px
            width:100%;
        }

        在js代码中,首先要创建一个实例:

window.onload = function(){
var myScroll = new IScroll(".wrapper",{
mouseWheel:true, //侦听鼠标滚轮事件
scrollbars:true, //是否显示默认的滚动条
 }) }

 

 在这里,用的是onload事件,就这个例子来说,使用DOMContentLoaded也是可以的。但是,正如官网中所推荐的,如果滚动区域里包含图片等,在这些元素还没有加载之前就完成了滚动条的初始化,isScroll在计算scrollbar的尺寸时就会发生错误。

上面留了一个问题:为什么容器要用position:relative呢?初始化的时候,scrollbars的值设置为true,会默认的在.wrapper所对应的元素后面添加一个子元素(appendChild),新添加的元素相对于容器元素定位。所以,如果不给父容器写定位,滚动条就不会出现。

        上面的步骤完成后,就能看到一个带着滚动条的区域了。但是当我缩放窗口的时候,.wrapper所对应的区域应该跟着缩放才对,这样就不会出现部分元素被遮挡的现象。我们用window的resize事件完成。

var oHeight = oWrap.innerHeight();
$(window).on("resize",scrollRefresh);//window的resize被触发,就执行scrollRefresh方法 function scrollRefresh(){ var curHeight = $(window).innerHeight()-parseFloat(oWrap.css("marginTop"))*2;//区域当前的高度=可视区域高度-上下margin curHeight=curHeight>oHeight?oHeight:curHeight;//当窗口恢复正常大小时,容器高度不会超过原来的高度 oWrap.css("height",curHeight); myScroll.refresh();//重绘.wrapper区域,包括计算包装器和滚动条的尺寸 }

 

 大部分的功能已经实现了,但是还有一个问题。如果可视区域比较小,.wrapper因为被遮挡而不能滑动到底部,也就是看不到底下的内容。我自己想到的一个解决方案是在window.onload完成的时候,首先执行一遍scrollRefresh方法,获取可视区域的高度,根据可视区域的大小设置滚动

部分的位置和尺寸。

完整的代码请见: https://github.com/yinggeABC/kanbisai/blob/master/isScrollDemo.html

 

关于isScroll如何使用

标签:

原文地址:http://www.cnblogs.com/yingge/p/5737994.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!