网上关于实现各种滚动效果的插件不胜枚举,这里,我简单介绍一下自己用过的两款比较有代表性的插件:

1.jquery.slimscroll.js,需要先引入jquery类库,主要用于模拟传统的浏览器滚动条(竖向),将要设置的内容外加div元素(可以取id为wrapper)包裹,然后在$(function(){})中进行实例化的参数设置:

  1. var myScroll=$("#wrapper").slimScroll({
  2. // width:"300px",//容器宽度度
  3. height:"600px",//容器高度
  4. size:"30px",//滚动条宽度
  5. position:"left",//滚动条位置,默认right
  6. color:"green",//滚动条颜色,默认#000000
  7. alwaysVisible:true,//是否禁用隐藏滚动条,默认false
  8. distance:"10px",//距离边框距离,默认1px
  9. start:".floor2",//滚动条初始位置,可选值top,bottom,$(selector),默认top
  10. wheelStep:'12px',//滚动条滚动值,默认10px
  11. //railVisible:true,//滚动条背景轨迹,默认false
  12. //railColor:'#005612',//滚动条背景轨迹颜色,默认#333333
  13. //railOpacity:0.8,//滚动条背景轨迹透明度,默认0.2
  14. //allowPageScroll:true,//滚动条滚动到顶部或底部时是否允许页面滚动,默认false
  15. })

网上找来的资料并没有介绍多少与slimscroll.js相关的事件或者方法,这里,经过自己的尝试,可以将一个简单的楼层滚动逻辑写成如下:

  1. $(".to8").on("click",function(){
  2. myScroll.slimscroll({
  3. scrollTo:'2100px'
  4. });
  5. })
  6. $(".to2").on("click",function(){
  7. myScroll.slimscroll({
  8. scrollTo:'300px'
  9. });
  10. })

如果想要滚动到某个具体元素的位置,除了计算出对应元素所对应的定位偏移量,好像就没有其他比较好的方法(也可能是我没有找到)。

想详细了解jquery.slimscroll.js,可以移步到http://plugins.jquery.com/slimScroll/

2.iscroll.js,直接用的5+,听说修复了旧版本中输入框无法输入、横向滚动时无法上下滚动页面等问题,现将自己使用过程中踩过的坑分享出来:

(1)只有容器元素的第一个子元素能进行滚动,其他子元素完全被忽略,html中布局如下:

  1. <div id="wrapper">
  2. <div id="scroller">
  3. <ul>
  4. <li></li>
  5. ...
  6. </ul>
  7. <ul>
  8. <li></li>
  9. ...
  10. </ul>
  11. </div>
  12. </div>

(2)为滚动容器(#wrapper)增加position:relative或者absolute,这将解决大多数滚动器容器大小计算不正确的问题;

(3)当DOM准备完成后IScroll需要被初始化,所以最保险的方式是在window的onload事件中启动它,在DOMContentLoaded事件或者inline initialization中做也可以;

如果你有一个复杂的DOM结构,最好在onload事件之后设置适当的延迟,再去初始化IScroll,一个简单的实例化代码如下:

  1. var myScroll=new IScroll("#wrapper",{
  2. //click:true,
  3. //preventDefault:false,
  4. preventDefaultException:{tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|A)$/},
  5. disableMouse: true,
  6. disablePointer: true,
  7. //disableTouch:true,
  8. });

(4)在初始化后你可以通过options对象访问myScroll实例的配置信息,即console.log(myScroll.options);

获取当前的滚动位置,即console.log(myScroll.y);

获取滚动到底部时的滚动位置,即console.log(myScroll.maxScrollY);

(5)当给scrollTo设置正数参数例如500时,即myScroll.scrollTo(0,-2333),这会导致整个scroller向下滚动到离wrapper顶部500px的位置,两者之间存在高度为500px的空白区域;

(6)scrollBy表示滚动到相对于当前位置的某处,即myScroll.scrollBy(0,-2333),其余同上;

(7)当滚动到指定位置后,鼠标滑轮可以向下滑,但是不能向上滑,同时$(window).scrollTop()一直显示为0,但是点中屏幕可以拉下上面的内容;

(8)一个简单的楼层滚动效果可以写成:

  1. $(".to8").on("click",function(){
  2. console.log(myScroll.y);
  3. myScroll.scrollToElement(".floor8");
  4. console.log(myScroll.y);
  5. });
  6. $(".to2").on("click",function(){
  7. console.log(myScroll.y);
  8. myScroll.scrollToElement(".floor2");
  9. console.log(myScroll.y);
  10. })

(9)改变DOM结构后直接设置滚动到指定位置,会出现偏差,所以需要加上refresh方法,例如:

  1. $(".show").on("click",function(){
  2. $(".spec").toggleClass("active");
  3. myScroll.refresh();
    myScroll.scrollToElement(".floor9");
  4. })

(10)分别设置滚动前和滚动后的触发事件,例如:

  1. //滚动开始前的触发事件
  2. myScroll.on('beforeScrollStart', function(){
  3. console.log('开始滚动');
  4. });
  5. //滚动结束时的触发事件
  6. myScroll.on("scrollEnd",function(){
  7. console.log("已到达指定位置")
  8. })

(11)如果实例化myScroll后无法点击<a>标签,可以在参数设置中添加preventDefaultException:{tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|A)$/ };

(12)如果一次点击触发两次click事件,阻止冒泡后还是会出现两次,解决办法是在参数设置中添加click:false;

(13)如果实例化myScroll后<input>标签无法失焦,解决办法有:

解封IScroll中的阻止默认事件,即参数设置中添加preventDefault:false,但是这样一来就会带来滑动的不流畅性甚至出现卡顿;

解封IScroll中的click事件,即参数设置中添加click:true,但是这样会导致一次点击触发两次click事件;

引入zepto.js+touch.js文件,在tap事件中设置输入框的失焦,代码如下:

  1. $('body').on("tap",function(e){
  2. if(e.target.nodeName != "INPUT"){
  3. $('input').blur();
  4. };
  5. })

(14)如果页面出现闪烁,直接给scroller添加css3新属性-webkit-transform:translate3d(0,0,0),会使浏览器启动硬件加速,还可以添加-webkit-backface-visibility:hidden来隐藏被旋转的元素的背面;

(15)如果页面出现卡顿,解决办法有:

参数设置中禁用掉一些不必要的功能(例如:bounce,momentum,fadeScrollbars,disableMouse,disablePointer);

加上document.addEventListener('touchmove', function(e){e.preventDefault();},false);

(16)异步加载DOM带来的滚动问题,解决办法有:

每次加载后运行myScroll.refresh();

添加定时器,每次循环时获取新增DOM区域的高度,当获取的高度等于目标高度时,关掉定时器,然后实例化myScroll

初探jquery.slimscroll.js和iscroll5.js的更多相关文章

  1. 插件五之滚动条jquery.slimscroll.js

    前言 slimscroll.js用于模拟传统的浏览器滚动条(竖向),原理为原内容内置于一个仅可视区域显示层,使用2个div层用于模拟滚动条和滚动条背景轨道监听滚动条div高度变化来控制内容层位置(猜测 ...

  2. jQuery滚动条插件 – jquery.slimscroll.js

    jquery.slimscroll.js插件是一个支持把内容放在一个盒子里面,固定一个高度,超出的则使用滚动.jquery.slimscroll.js不仅可以定义高度.宽度,还可以定义位置.滚动条大小 ...

  3. 针对模拟滚动条插件(jQuery.slimscroll.js)的修改

    在开发过程中程序员总会碰到产品经理提出的各种稀奇古怪的需求,尽管有些需求很奇葩,但不得不说有些须有还是能指引我们不断的学习与进步,最近在工作中就碰到这种问题.需求是要求在各主流浏览器上使用自定义的滚动 ...

  4. 仿jQuery的siblings效果的js原生代码

    仿jQuery的siblings效果的js原生代码 <previousSibling> 属性返回选定节点的上一个同级节点(在相同树层级中的前一个节点). <nextSibling&g ...

  5. jquery------导入jquery.2.2.3.min.js

    问题: 导入jquery.2.2.3.min.js后MyEclipse会提示代码有错误 方法: 选中jquery.2.2.3.min.js->右键->选择“MyEclipse”中的“Exc ...

  6. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记3

    技术很多,例子很多,只好慢慢学,慢慢实践!!现在学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] JavaScript.jQuer ...

  7. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记2

    技术很多,例子很多,只好慢慢学,慢慢实践!!现在学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] JavaScript.jQuer ...

  8. JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记1

    技术很多,例子很多,只好慢慢学,慢慢实践!!现在学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] 第 3 章 用 JavaScri ...

  9. jquery操作iframe中的js函数

    关键字:jquery操作iframe中的js函数 1.jquery操作iframe中的元素(2种方式) var tha = $(window.frames["core_content&quo ...

随机推荐

  1. 4D卓越团队-两天培训总结

    上周末参加了公司组织的领导力培训课程-4D卓越团队(创业型团队领导力训练项目),感觉有一些用,在这里分享一下. 课前游戏 培训老师先带我们做了一个游戏:每一个人,在同时参加培训的人中找到另外的 6 个 ...

  2. win2008R2 下解决关于mysql odbc无法正常工作问题

    1.安装 mysql-connector-odbc-5.1.1-win32 下载 2.确保IIS中“启用32位应用程序”为True 3.连接字符串: mysql_connstr="Drive ...

  3. Unmanaged Exports使用方法

    Unmanaged Exports,可以利用C#生成非托管的DLL文件. 从https://sites.google.com/site/robertgiesecke/下载UnmanagedExport ...

  4. python学习笔记(字符串操作、字典操作、三级菜单实例)

    字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...

  5. IIS7 应用程序池自动回收关闭的解决方案

    在ASP.NET Application中加入某个定时任务,那想必一定是用一个线程在不停地做定时计算,在自己的ASP.NET应用程序中加入了Quartz.NET框架 夜间或者网站在经过无访问阶段后,后 ...

  6. 实现文字自动横移--- jquery尺寸相关函数

    效果图: 一实现文字自动横移 <style type="text/css"> #demo {overflow:scroll;width:740px; } #indemo ...

  7. C#Excel文件加密实现,支持xlsx、docx、pptx(C#\Net\Asp.Net)

    从此刻开始,我已封闭!概不接客! 像风一样的男人,像风一样的性格,无拘无束,不拘一格.那么问题来了,当风遇到沙,不一定你是风儿,我是沙儿的缠缠绵绵,.也许是漫天黄沙,飞粒走石.如果我们期望擒住这漫天的 ...

  8. 用CSS3写一个立方体

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  9. java web之个人通讯录系统

    前天下了第一场雪,专业课老师给我们布置了一个期末小作业,真的感觉到寒假就要来临了.这个学期没过多久就要结束了.总结这学期,感觉还是有不少收获的.完成了当初许下的诺言,现在也越来越喜欢软件这个行业了,虽 ...

  10. MBProgressHUD 显示后,为何不能点击屏幕其他地方

    解决办法: hud.userInteractionEnabled= NO;  就是这么简单粗暴!这个问题 我一定要发到首页候选区! /********************************* ...