学习使用jquery iScroll.js移动端滚动条插件


Posted in Javascript onMarch 24, 2020

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

iScroll的产生:

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

iScroll的使用方法:

iScroll的原理是外层有一个溢出隐藏(overflow:hidden;)的DOM,然后这个区域内的第一个DOM结构会被实例化,其包裹的内容可以纵向或者横向的滚动,所以在使用iScroll的时候,滚动元素要尽量的简单,减少DOM个数,减少嵌套,因为DOM结构越是复杂iScroll运行起来就越是吃力,有可能会造成某些节点显示不正常的情况。 所以,推荐使用的DOM结构如下:

<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)才可以被实例化滚动:

<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:

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结构

<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文件内容

var myscroll;
 function iscroll(data){
 //实例化iScroll
 myscroll=new iScroll("wrapper");
 pageData(data);
 }
 function pageData(obj){
 $("body").html(obj);
 myscroll.refresh();//当DOM结构发生变化的时候,需要刷新iScroll
 }
 iscroll("<div>pagedata</div>");

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横向滚动 默认为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轴滚动距离,效果时间,是否相对当前位置。所以例如:

//在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移动端滚动条插件有所帮助。

Javascript 相关文章推荐
javascritp实现input输入框相关限制用法
Jun 29 Javascript
IE与firefox下Dhtml的一些区别小结
Dec 02 Javascript
兼容FF和IE的动态table示例自写
Oct 21 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
Sep 23 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
Oct 23 Javascript
微信小程序 scroll-view隐藏滚动条详解
Jan 16 Javascript
jQuery为某个div加入行样式
Jun 09 jQuery
Vue.js结合Ueditor富文本编辑器的实例代码
Jul 11 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
JS实现面向对象继承的5种方式分析
Jul 21 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
Sep 11 Javascript
解决vue+router路由跳转不起作用的一项原因
Jul 19 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
Feb 25 #Javascript
JavaScript 正则表达式中global模式的特性
Feb 25 #Javascript
javascript动态获取登录时间和在线时长
Feb 25 #Javascript
基于javascript实现动态时钟效果
Aug 18 #Javascript
jQuery使用zTree插件实现树形菜单和异步加载
Feb 25 #Javascript
灵活的理解JavaScript中的this指向
Feb 25 #Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 #Javascript
You might like
PHP获取网站域名和地址的代码
2008/08/17 PHP
php模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
php的4种常用运行方式详解
2016/12/22 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
基于JavaScript实现自定义滚动条
2017/01/25 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
express启用https使用小记
2019/05/21 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
python实现自动解数独小程序
2019/01/21 Python
Python简单I/O操作示例
2019/03/18 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
python批量处理文件或文件夹
2020/07/28 Python
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
医院总经理岗位职责
2014/02/04 职场文书
小学生元旦广播稿
2014/02/21 职场文书
先进基层党组织材料
2014/12/25 职场文书
节约用电倡议书
2015/04/28 职场文书
杨善洲观后感
2015/06/04 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python