插件的创建和使用

        第三方插件可在:http://jquerymobile.com/resources/#Plugins中查找,jQuery Mobile支持多种形式的扩展:
    • 主题:一个CSS文件,或一组图片,或者两者兼容。
    • 插件:一个JavaScript文件,一个css文件,为框架增添新的部件(data-role)。
    • 扩展:一个JavaScript文件,为现有的jQuery Mobile部件和核心功能增加新的行为。
      创建插件要认识到以下问题:
    • 用户在使用插件时,只需在页面插入一个JavaScript文件和一个css文件。
    • 插件应能无缝地兼容现有的自定义命名空间以及主题切换。
    • 插件应和框架中的其他部分一样自动进行初始化
    • 尽可能地避免使用通用的名字来命名自定义的data-role,以避免与框架后续版本中的命名发生冲突。

    基础模板

    • 自动初始化,即借助data-role或者带有语义的html5代码的声明,自动地初始化部件。
    • 显示地通过jQuery语法调用部件的构造函数进行初始化。例如:$("#myelement").widgetname();
     部件的模板:
   (function($){
        //把所有的代码封装在这个方法中以确保$是jQuery对象的引用
        //部件的定义
        $.widget("mobile.ourWidgetName",$.mobile.widget,{
                   options:{
                    //创建部件默认的选项。部件的各项配置。
                   },
                  _create:function(){
                       //构造函数 
                    },
                  //公有方法
                 enable:function(){
                    //启用部件
                 },
                 disable:function(){
                    //禁用部件
                },
                refresh:function(){
               //刷新部件
                }
            })
        });//部件定义结束
      //自动初始化代码
      $(document).bind("pagecreate",function(event){
      //找到相应的data-role然后应用初始化方法
      $(event.target).find(":jqmData(role='ourWidgetName')").ourWidgetName(); 
      });
   }(jQuery));
   自我理解:_create方法是部件的构造器。它只在初始化的时候被调用。因为这个是扩展,所以肯定有继承,父类的方法中有create方法,方法加个_变成子类的用法很常见。
 
 实例:
        例如定义一个dynamicimage。两种实现方式:
    第一种是找到页面上的所有img元素自动地应用dynamicimage调整大小。
    第二种是定义一个新的data-role,叫做dynamicimage,只针对data-role为dynamicimage的img元素来调整大小。
         通常需要实现refresh、enable和disable这三个jQuery Mobile里的通用方法。例如,程序通过JavaScript改变图片的URL后,需要用$("#ourImag").dynamicimage("refresh")调用公有方法refresh来触发部件的刷新行为。
  
 1 (function($){

 2     //小部件的定义

 3     $.widget("mobile.dynamicimage",$.mobile.widget,{

 4         options:{

 5             margin:0,width:100

 6         },

 7         _create:function(){

 8             this._loadURL();

 9         },

10         //私有方法

11         _loadURL:function(){

12             //this.element就是我们的img元素

13             var url;//原来定义Seccha IO Src服务的URl

14             url="http://src.sencha.io/";

15             var parameters="";

16             if(!isNaN(this.options.width)){

17                 parameters+="X"+this.options.width;

18             }

19             if((!isNaN(this.options.margin))&&this.options

20             .margin>0){

21                 parameters+="-"+this.options.margin;

22             }

23             if(parameters.length>0){

24                 url+=parameters+"/";

25             }

26             //Sencha Io 需要提供URl的绝对路径

27             //使用jqmDat而不是attr,可以使代码兼容自定义命名空间。元素中所有

28             //data-*属性都会自动匹配到部件对象的this.optons;

29             var originalUrl=$(this.element).jqmData("src");

30             if(originalUrl.length>1){

31                 var newUrl="";

32                 if($.mobile.path.isAbsoluteUrl(originalUrl)){

33                     //图片的Url是绝对路径

34                     newUrl=originalU;

35                 }else{

36                     //图片url是相对路径,我们计算绝对路径

37                     var baseUrl=$.mobile.path.parseUrl(location.href);

38                     var baseUrlWithoutScript=baseUrl.protocol+"//"+baseUrl.host+baseUrl.directory;

39                     newUrl=$.mobile.path.makeUrlAbsolute(originalUrl,baseUrlWithoutScript);                    

40                 }

41                 url+=newUrl;

42                 $(this.element).attr("src",url);

43             }            

44         },

45         //公有方法

46         enable:function(){

47             //启用小部件

48             $(this.element).attr('disabled','');

49         },

50         disable:function(){

51             //禁用小部件

52             $(this.element).removeAttr("disable");

53         },

54         refresh:function(){

55             //刷新小部件

56             this._loadURL();

57         }

58     });

59     //小部件定义结束

60     //自动化初始化代码,页面会查找所有data-role=“dynamicimage”属性的元素来创建dynamicimage实例。

61     $(document).bind('pagecreate',function(event){

62         //找到相应的data-role,调用dynamicimage的构造器

63         $(event.target).find("img:jqmData(role='dynamic-image')").dynamicimage();

64     });

65 }(jQuery));
View Code

    使用方法:

    <script src="jquery.mobile-dynamicimage-1.0.js"></script>
    我们只需创建配置正确参数的img元素就可以了:
    <!--占据屏幕全部宽度的图片-->
    <img data-src="images/photo.png" data-role="dynamic-image">
    <!--占据屏幕40%宽度的图片-->
    <img data-src="images/photo.png" data-role="dynamic-image" data-width="40">
  <!--占据屏幕100%宽度并且带20个像素的外边距的图片-->
   <img data-src="images/photo.png" data-role="dynamic-image" data-width="40" data-margin="50"> 
 
插件推荐:
分页插件:http://filamentgroup.com/lab/jquery_mobile_pagination_plugin,可以对内容(比如图片)进行分页。
    使用:创建一个data-role="pagination"的ul元素。每个jQuery Mobile页面都应该包含一个分页小部件。
  例子:
    <ul data-role="pagination">
        <li class="ui-pagination-prev"><a href="1.html">prev</a></li>
        <li class="ui-pagination-next"><a href="2.html">next</a></li>
    </ul>
      其它:
  类似于ios应用程序底部的标签导航: http://www.stokkers.mobi/valuables/bartender.html
    DateBox插件: http://dev.jtsage.com/jQM-DateBox
    Simple Dialog插件(弹窗): http://dev.jtsage.com/jQM-SimpleDialog
    Action Sheet插件(模拟弹出菜单): https://github.com/hiroprotagonist/jquery.mobile.actionsheet
 
供平板使用的插件:
      SplitView插件可以在:http://asyraf9.github.com/jquery-mobile找到,利用它可以把页面分成两块区域,这两个区域也叫做面板。
      MultiView插件:http://www.stokkers.mobi/valuables/multiview/page1.html和上面的差不多。但包括四个面板:菜单面板;主面板;全屏面板(可选,横屏时可用);弹出面板(可选,竖屏时可用);
 
兼容的jQuery UI插件:
    photoswipt(http://photoswipe.com),创建照片画廊;
    Diapo(http://www.pixedelic.com/plugins/diapo),很棒的css动画效果的幻灯片画廊;
    jQuery UI Maps(http://code.google.com/p/jquery-ui-map),在移动web应用中集成Google地图的插件;
    MobiScroll(http://www.mobiscroll.com):使用步进器或者轮盘的方式进行事件日期的选择;
 
    

你可能感兴趣的:(插件)