`

客户端元素滑动和滚动效果实现

 
阅读更多

 

最近一直在搞一些有关元素动态展示的功能,这么做是为了增加用户的体验,使得客户端更加的具有和用户之间的交互作用;

下面是我这篇文章的大纲:

1,介绍两种插件,实现元素轮番展示和拖动元素滑动的效果;

2,插件参数的介绍;

3,扩展功能的提出和实现;

4,一些悬而未解的问题,写在最后希望高手指点迷津,经验交流,小生不胜感激!

进入正题:

(1)为大家介绍两款插件,使用起来比较简单,要是需要更高级的效果,还可以自己实现;一个是jquery插件:jcarousellite,一个是iscroll插件;官方地址分别是:

http://www.gmarwaha.com/jquery/jcarousellite/index.phphttp://cubiq.org/iscroll-4

下面就写点自己使用过程中的一些感悟,一般网页上实现元素的滑动或者滚动都是使用ul元素进行封装,为什么要这么做?我在一个美女空间里发现了她写的一篇日志,解释的挺不错,在这里我就偷一下懒,引用她的观点了:

重组div的结构。

重组的主要目的是,在原div的里面添加一个div(player),在player里面添加另一个div(box)。这里两个div我觉得是非常有有必要的,后面要设置player的css,并且实际上滚动字幕的容器是player,位置变化,真正滚动的部分是box。当然,palyer的任务可以交给外面的div来完成,box的工作和任务可以交给里面的ul来完成,这样对设计师来说,原来的div还是div,只是用来布局的,没有任何影响。而里面的ul,有的设计师喜欢定义整个页面所有的ul的css,我怕会对我的字幕里的ul产生什么现在还不能预料的影响,所以在ul的外面嵌套一个div。(引用地址:http://apps.hi.baidu.com/share/detail/852064

iscroll中的滑动原理也是一样的,模式也是div+div+ul+li 简单点说:最外面的一层div可以看成是一个显示器,显示器下的第一个子元素就可以当做一个滚动元素的box,可以看成是一个滚动条,显示的元素多少,是有显示器的宽度来决定的,滚动的长短是由box的宽度来决定的;

jcarousellite 实现滚动,官方文档中介绍的很详细,这里我就不做过多的说明;

(2)

jcarousellite参数

Js代码
  1. $.fn.jCarouselLite = function(o) {      
  2.      o = $.extend({      
  3.          btnPrev: null,   //上一张按钮   
  4.          btnNext: null,   //下一张按钮   
  5.          btnGo: null,      //跳转到第几张   
  6.          mouseWheel: false,   //是否支持鼠标滚轮,需要jquery.mousewheel.js   
  7.          auto: null,   //是否自动滚动   
  8.      
  9.          speed: 200,   //滚动时长   
  10.          easing: null,   //滚动优化,需要jquery.easing.1.1.js   
  11.      
  12.          vertical: false,   //滚动方向,true垂直,false水平   
  13.          circular: true,   //是否重复播放,首位相接   
  14.          visible: 3,         //显示图片数量   
  15.          start: 0,           //从第几个开始滚动显示   
  16.          scroll: 1,          //每次滚动数量   
  17.      
  18.          beforeStart: null,   //滚动前调用函数   
  19.          afterEnd: null        //滚动后调用函数   
  20.      }, o || {});     

iscroll 参数

这个就NB 了,里面的参数挺多的,下面就说一下比较特殊的几个,其他的基本参数就可以自己在iscroll中的API中查找,地址:http://cubiq.org/iscroll,若你感觉读官方文档比较吃力的话,这里有一篇翻译过来的,个人感觉不错:http://hi.baidu.com/ali_myself/blog/item/7cbe2aa296b1459046106419.html

iscroll4官方文档给出了5个例子,都挺经典的,有兴趣的可以仔细的研读一下;特别是pullUp/Down Refresh 这个在手机应用中经常能看到;

this.x /this.y:判断元素scroll left/right滑动距离可以使用this.x,这个参数是返回的结果是滑动元素li:first,距离最左边的一个距离,就相当于原点,scroll left ,this.x<0;scroll rigth ,this.x >0;同样,scroll也提供了 this.y ,这个可以参考pullUp/Down refresh例子中的js写法;

snap:捕获元素,通常设置为true,这样元素的滑动,是一屏一屏的滑动,你也可以设置成只捕获一个li元素,但是写法有要求:你可以写成“ li " or "li .a"但是”#scroller li" is wrong;

(3)

这里有个需求:iscroll只能实现元素的单方向的滑动,不能实现像jcarousellite那样的轮番循环的滑动,如果能把iscroll的滑动结合jcarousellite的循环展示,这该多好啊;

于是,就开始了我的工作:

1)判断元素向左向右滑动,

2)滑动一个元素,就把隐藏到div中的那个元素移到li元素的最后,可以直接的使用jquery操作元素,改变li布局,也可以改变li样式position,但是,实验证明:只改动position:left的坐标,下次获取元素的时候,使用eq()或者nth-child()方法获取的都不是指定的元素,这里我想到了使用refresh();好像也没有起作用,最后只能保险起见,先挪动position样式,然后更改li元素的位置,这样,不至于出现错误;

code:onScrollEnd:function(){

            if(thisX > 0){
                this.minScrollX=450;
                var last = $("#thelist li").last();
                $("#thelist li").first().before(last);
                for(var i=0;i<=4;i++){
                        var positions = $("#thelist li").eq(i).position().left;console.log("..."+$("#thelist li").eq(0));
                        $("#thelist li").eq(i).css("left","+=90");
                        if(positions >=360){
                            $("#thelist li").eq(i).css("left","0px");
                        }
                        this.minScrollX -= 90;//alert(this.minScrollX);myscroll.refresh();
                    }
            }else if(thisX < 0){//alert(this.options.bounce);
                var first = $("#thelist li").first();
                //var scrollWidth = 450;
                $("#thelist li").last().after(first);           
                    this.maxScrollX = 450;
                    for(var i=0;i<=4;i++){
                        //$(".scroller").css("width",scrollWidth+"px");
                        var positions = $("#thelist li").eq(i).position().left;
                        $("#thelist li").eq(i).css("left","-=90");
                        if(positions <= 0){
                            $("#thelist li").eq(i).css("left","360px");
                        }
                        this.maxScrollX += 90;//scrollWidth += 90;$(".scroller").css("width",scrollWidth+"px");
                    }
            }
        },
 

3)实现了,但是有个bug:每次的滑动都要先反弹,然后才能更换位置,这个原因是:我把置换位置的操作放到 了 方法onscrollEnd中执行了,应该放到onscrollMove中执行;而这又引发了另外的一种问题出现:滑动的时候,会闪屏,这个原因是因为每次的鼠标onmousemover事件都相应的触发了我写的置换元素位置的方法;这样,也就遇到了问题;怎样才能在onscrollMove中完美的实现滚动;

(4)问题:

怎样通过判断鼠标拖动的距离来判断应该滑动几个li元素;

怎样实现向左向右的滑动,而不会出现上面提到的反弹;

 

分享到:
评论

相关推荐

    超实用的jQuery代码段

    全书分为11章,包含网页效果、DOM元素与属性、HTML事件、CSS样式、用户输入自动完成、拖放、图形图像、AJAX、算法、jQuery Mobile应用、浏览器、Cookies等jQuery技术内容,对提高网站开发人员和设计人员的jQuery技术...

    软件界面设计工具_3款合集

    可使用标准Windows元素创建图形用户界面(GUI)屏幕,包括框架窗口、会话、菜单、工具栏、标签、按钮、复选框、单选按钮、滚动条、滑动调节框、微调框、组合框、树列表、列表框、编辑框以及静态文本等。 通过现有...

    vc++ 应用源码包_1

    如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其...

    vc++ 应用源码包_2

    如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其...

    vc++ 应用源码包_6

    如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其...

    vc++ 应用源码包_5

    如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其...

    vc++ 应用源码包_3

    如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其...

    《程序天下:JavaScript实例自学手册》光盘源码

    3.40 使用marquee实现文字上下滚动 3.41 类似安装效果的textarea滚动 3.42 始终显示在最顶端的文本 3.43 JavaScript过滤SQL注入字符 3.44 textarea内实现行的翻页效果 3.45 textarea中的文本插入 3.46 查找两段文本...

    vc++ 开发实例源码包

    如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其...

    程序天下:JavaScript实例自学手册

    3.40 使用marquee实现文字上下滚动 3.41 类似安装效果的textarea滚动 3.42 始终显示在最顶端的文本 3.43 JavaScript过滤SQL注入字符 3.44 textarea内实现行的翻页效果 3.45 textarea中的文本插入 3.46 查找两段文本...

    javascript完全学习手册2 源码

    4.2.3 表单元素属性和事件 4.2.4 表单验证 4.3 Anchor与Link对象 4.3.1 Anchor对象 4.3.2 Link对象 4.4 Image对象 4.4.1 图像翻转 4.4.2 图像载入 第5章 JavaScnpt其他常用窗口对象 5.1 Window对象 ...

    漂亮的ComponentArtWebUI web界面

    客户端滚动事件。 客户端beforeCallback事件。 ColumnResizeRedistributeWidth属性用于控制缩放状态。 ComponentArt Menu 引入(已选)checking和(未选)unchecking项的概念。允许菜单项成为复选框或者单元按钮。 ...

    javascript完全学习手册1 源码

    14.2.5 图片滑动效果 423 14.2.6 三维相册 433 14.3 时间特效 442 14.3.1 时钟提示自动关闭 442 14.3.2 日历生成器 444 14.4 窗口特效 450 14.4.1 窗口拖动 451 14.4.2 图层受标签控制显示 457 14.5 鼠标特效 460 ...

    精通JavaScript

    查看1.2.htm中noscript显示效果的方法如下: 1.将该实例复制到C:\Inetpub\wwwroot下; 2.选择浏览器的“工具”-“安全”-“本地Intranet”-“自定义级别”-“活动脚本”中选用“禁用”单选框 3.在浏览器中...

    漂亮的ComponentArtWebUI及Demo源码(商业版带安装序列号)part2

    客户端滚动事件。 客户端beforeCallback事件。 ColumnResizeRedistributeWidth属性用于控制缩放状态。 ComponentArt Menu 引入(已选)checking和(未选)unchecking项的概念。允许菜单项成为复选框...

    漂亮的ComponentArtWebUI及Demo源码(商业版带安装序列号)part1

    客户端滚动事件。 客户端beforeCallback事件。 ColumnResizeRedistributeWidth属性用于控制缩放状态。 ComponentArt Menu 引入(已选)checking和(未选)unchecking项的概念。允许菜单项成为复选框...

    精通javascript

    查看1.2.htm中noscript显示效果的方法如下: 1.将该实例复制到C:\Inetpub\wwwroot下; 2.选择浏览器的“工具”-“安全”-“本地Intranet”-“自定义级别”-“活动脚本”中选用“禁用”单选框 3.在浏览器中...

    可道云文件管理kodbox 1.15

    tab菜单手势滑动切换,包含滚动条时自动过滤;侧边栏手势支持:文件管理树目录,后台菜单侧边栏,个人中心侧边栏;在页面右滑可打开侧边栏,左滑关闭;手势处理:点击元素允许input,但当前焦点为input时忽略,点击...

Global site tag (gtag.js) - Google Analytics