zoukankan      html  css  js  c++  java
  • 编写Jquery插件

    jQuery基本上是前端开发中使用最多的JavaScript工具库。有些项目开发过程中总会有些业务逻辑相似的代码块,为了便于管理项目中的逻辑,这些逻辑相似的代码块我们可以编写jQuery插件进行统一管理。

    起步

    引用相关所需文件

    <link href="./css/jquery-ui.css" rel="stylesheet">
    
    <script src="./script/jquery.js"></script>
    <script src="./script/jquery-ui.js"></script>

      <!-- 自定义插件 -->
      <script src="./component/widget.js"></script>

    这样我们就可以使用jQuery UI原生插件--dialog、progress等;也可以在此基础上对插件进行扩展。

    中文网教程地址

    扩展小部件

    创建小部件是通过向 $.widget() 传递小部件名称和一个原型对象来完成的;下面的实例是在 "custom" 命名空间中创建一个 "superDialog" 小部件:

    $.widget( "custom.superDialog", {} ); 

    为了支持扩展,$.widget()可选性地接受父部件的构造函数,当指定一个父部件时,把它作为第二个参数进行传递,定义的小部件会继承父部件的属性和方法:

    $.widget( "custom.superDialog", $.ui.dialog, {} );

    上面我们在custom命名空间定义了superDialog部件,它继承于原生的dialog部件,我们可以像使用dialog一样使用superDialog。

    <div class="dialog-sec">
    <p>这是一个动画显示的对话框,用于显示信息。对话框窗口可以移动,调整尺寸,默认可通过 'x' 图标关闭。</p>
    </div>
    $('.dialog-sec').superDialog({
        autoOpen: true,
        title:'自定义弹窗',
        show: {
            effect: "blind",
        duration: 1000
        },
        modal: true, 
    }) 

    小部件中有两个基本属性:

    • this.element: 是一个包含一个元素的 jQuery 对象。如果我们的插件在包含多个元素的 jQuery 对象上调用,

            则会为每个元素创建一个单独的插件实例,且每个实例都会有自己的this.element;

    • this.options:是一个包含所有插件选项的键名/键值对的哈希,可以传值给插件;

    小部件方法的重写及调用

    我们可以扩展已有的方法

    $.widget( "custom.superDialog", $.ui.dialog, {
        options: {},
        _create: function() {
            this.element.css("color", "red")
            return this._super()
        },
        _destory: function() {
            return this._super()
        }
    })        

    这里我们重载了_create私有方法,并设置了dialog中元素的颜色。记住,重写方法会覆盖掉原生插件中的默认行为,我们可以通过部件库提供的_super()继承父部件行为,实际上效用等同于call()方法。

    使用小部件的插件调用方法,把方法名称以字符串形式进行传递,几种调用部件方法的写法如下:

    • $( ".selector" ).dialog( "close" )--调用原生方法
    • $( ".selector" ).dialog( "option", key, value ) --传参调用
    • $( ".selector" ).dialog( fun, param ) --调用自定义方法

    部件的私有方法在外部是无法调用的,我们只能调用部件暴露出来的原生或自定义的方法。

    添加回调

    最简单的扩展插件的方法是添加回调,这样我们就只用在插件内部只处理最基础的交互逻辑,而复杂的业务逻辑就交给具体的实例去处理。

    setTitle: function(value) {
        this._setOption('title',value)
        this._trigger('complete',null,{value:value})
    },

    我们这里定义个setTitle方法来改变dialog弹窗标题,更改成功后触发实例上的complete回调。

    _trigger() 方法有三个参数:回调名称,一个启动回调的 jQuery 事件对象,以及一个与事件相关的数据哈希。回调名称是唯一一个必需的参数。

    然后,我们在插件实例上定义complete事件进行业务处理:

    $('.dialog-sec').superDialog({
        autoOpen: true,
        title:'自定义弹窗',
        show: {
            effect: "blind",
            duration: 1000
        },
        modal: true, 
        complete:function(event,data){
            console.log('....complete....')
            console.log(data)
        },
    })

    只要更改dialog标题,触发实例上的回调:

    $('.dialog-sec').superDialog('setTitle','更改标题')
    ....complete....
     {value: "更改标题"}

    部件库优势

    jQuery插件定义了如何创建和销毁小部件,获取和设置选项,调用方法,以及监听小部件触发的事件。创建的是有状态的插件,它们有全生命周期、维持状态以及对变化的反应。

  • 相关阅读:
    demo2.css
    less的嵌套
    ddd.css
    LESS自学
    vue.js过滤器 “|”
    v-if,v-else数据绑定
    v-for基本用法
    在spring中使用JdbcTemplate进行数据库管理操作
    2013第四届蓝桥杯JavaB组省赛 第一题:世纪末的星期
    PTA L1-049 天梯赛座位分配 (20分)
  • 原文地址:https://www.cnblogs.com/lodadssd/p/10044581.html
Copyright © 2011-2022 走看看