jQuery技术

【技术分享】JQuery Mobile转场分析

字号+ 作者:H5之家 来源:H5之家 2017-06-26 08:01 我要评论( )

【技术分享】JQuery Mobile转场分析,关于使用JQM(JQuery Mobile)看到很多人提出的第一句话就是性能不行,再问就是转场闪屏等.这里就分享下我对转场的一些学习成果

正文

关于使用JQM(JQuery Mobile)看到很多人提出的第一句话就是性能不行,再问就是转场闪屏等.这里就分享下我对转场的一些学习成果.

JQM的转场实际上利用的全部是CSS,只是简单的一个addClass 和removeClass.下面是带动画转场的函数

Java script代码

收藏代码

functioncss3TransitionHandler(name,reverse,$to,$from){ vardeferred=new$.Deferred(), reverseClass=reverse?"reverse":"", viewportClass="ui-mobile-viewport-transitioningviewport-"+name, doneFunc=function(){ $to.add($from).removeClass("outinreverse"+name); if($from&&$from[0]!==$to[0]){ $from.removeClass($.mobile.activePageClass); } $to.parent().removeClass(viewportClass); deferred.resolve(name,reverse,$to,$from); }; $to.animationComplete(doneFunc); $to.parent().addClass(viewportClass); if($from){ $from.addClass(name+"out"+reverseClass); } $to.addClass($.mobile.activePageClass+""+name+"in"+reverseClass); returndeferred.promise(); }



从中可以看到,只有各种的样式切换,除此以外别无它物.至于 $.Deferred()是JQuery提供的延迟处理的机制,这里不做讨论.

简单看看这个函数的4个参数,分别是转场效果名称、是否回退、前一页面jq对象、目标页面jq对象。处理的逻辑描述起来也非常简单:

1.是否存在前一个页面,存在增加out
2.为目标页面增加in和激活页面样式
3.当页面动画完成删除前一个页面的激活页面样式和目标页面转场样式


接下来看看CSS部分,其实所有的东西都可以用一个transform(至于transform这里也不做解释)搞定,以slide为例

Css代码

收藏代码

.slide.out{ -webkit-transform:translateX(-100%); -webkit-animation-name:slideouttoleft; } .slide.in{ -webkit-transform:translateX(0); -webkit-animation-name:slideinfromright; } .slide.out.reverse{ -webkit-transform:translateX(100%); -webkit-animation-name:slideouttoright; } .slide.in.reverse{ -webkit-transform:translateX(0); -webkit-animation-name:slideinfromleft; }



实际上就是通过-webkit-animation-name指定了一组动画效果

Css代码

收藏代码

@-webkit-keyframesslideinfromright{ from{-webkit-transform:translateX(100%);} to{-webkit-transform:translateX(0);} } @-webkit-keyframesslideinfromleft{ from{-webkit-transform:translateX(-100%);} to{-webkit-transform:translateX(0);} } @-webkit-keyframesslideouttoleft{ from{-webkit-transform:translateX(0);} to{-webkit-transform:translateX(-100%);} } @-webkit-keyframesslideouttoright{ from{-webkit-transform:translateX(0);} to{-webkit-transform:translateX(100%);} }



所以如果需要扩展自己的类型,只要按照约定新增自己的样式表就可以做到。




另外关于JQM转场闪屏的问题,其实可以通过下面的样式修正

Css代码

收藏代码

.ui-page{ backface-visibility:hidden; -webkit-backface-visibility:hidden;/*ChromeandSafari*/ -moz-backface-visibility:hidden;/*Firefox*/ }



只需要在页面元素增加背面不可见,来防止动画发生的时候产生的闪屏.我在HTC G17 的真机环境下,没有任何问题.


PS:如果需要更改动画速度,只需要更改下面的-webkit-animation-duration即可

Css代码

收藏代码

.in,.out{ -webkit-animation-timing-function:ease-in-out; -webkit-animation-duration:350ms; }

原文链接

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jQuery EasyUI 教程

    jQuery EasyUI 教程

    2017-06-26 15:01

  • jquery为页面增加快捷键示例

    jquery为页面增加快捷键示例

    2017-06-26 08:00

  • jquery插件开发注意事项

    jquery插件开发注意事项

    2017-06-24 11:01

  • jquery.fileupload插件的简易使用日志

    jquery.fileupload插件的简易使用日志

    2017-06-23 15:00

网友点评