码迷,mamicode.com
首页 > 其他好文 > 详细

插件的创建和使用

时间:2014-12-11 12:07:33      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

        第三方插件可在: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来触发部件的刷新行为。
  
bubuko.com,布布扣
 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):使用步进器或者轮盘的方式进行事件日期的选择;
 
    

插件的创建和使用

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/anlen/p/4157129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!