• 组件


    一、组件 
        * js组件
                 *     把一个效果或者功能用面向对象的方法封装起来,只提供给用户一些相关的方法或者数据接口
                 * 
                 * 特点
                 *     易扩展,易维护。相互之间不会有影响
                 * 
                 * 组件的组成
                 *     1、配置参数
                 *         放在初始化函数里(init)
                 *     2、方法
                 *         放在原型里的函数
                 *     3、自定义事件
                 *         除了系统以外的事件

    二、配置参数
       自己设定的默认参数,如果默认参数没有传进来的参数,那么这个传进来的参数无效
    1. window.onload=function(){
    2. var p1=new Drage();
    3. //用户传进来的数据
    4. p1.init({
    5. id:'div',
    6. up:function(){
    7. console.log('起来了');
    8. }
    9. });
    10. }
    11. //组件的函数就像系统的函数一样,
    12. function Drage(){
    13. //在构造函数里面写默认参数
    14. this.settings={
    15. id:'',
    16. up:function(){},
    17. down:function(){}
    18. }
    19. }
    20. //配置默认参数
    21. Drage.prototype.init=function(opt){
    22. //在初始化函数里面,拿用户传进来的参数去覆盖默认的参数,并且这个代码要放在init函数的最上面
    23. for(var attr in opt){
    24. if(this.settings.hasOwnProperty(attr)){
    25. this.settings[attr]=opt[attr];
    26. }
    27. }
    28. this.obj=document.getElementById(this.settings.id);
    29. var This=this; //因为click的主语是构造函数new出来的对象,,下面要调用就需要先存一下,
    30. this.obj.onclick=function(){
    31. This.click();
    32. }
    33. }
    34. Drage.prototype.click=function(){
    35. this.settings.up.call(this); //调整this的指向。
    36. }
    三、自定义事件
                 * 自定义事件
                 *     自己定义的事件,除了系统提供以外的事件。有利于多人协作开发,可扩展js原有事件
                 *     需要用到事件绑定器、事件触发器
                 * 
                 *     自定义事件其实就是调用函数,在指定的环境下让这个函数触发,就相当于事件了
                 *     (能够让同名的函数一起执行)
            
                 * 自定义事件三要素
                 *     对象、事件名、事件处理函数
                 *         1、可以利用对象数据结构里的key:value的形式把事件名字与事件处理函数对应起来
                 *         2、把多个函数放到一个数组里,循环去执行数组里每个函数,就可以做到让所有函数都执行
                 * 
                 * 定义事件
                 *     obj.events={
                 *         '事件名1':[fn1,fn2],
                 *         '事件名2':[fn3,fn4,fn5],
                 *     }
                 * 
                 * 调用事件(循环去调)让这个事件名的所有函数都被调用
                 *     obj.events['事件名1'].fn1();
                 *     obj.events['事件名1'].fn2();
                 *         
                 */
    1. //添加自定义事件
    2. function customEvent(obj,eventName,fn){
    3. /*
    4. * obj 对象()
    5. * eventName 对象身上的一个事件名称(它的值是一个数组)
    6. * fn 事件处理函数(它是放在数组里)
    7. */
    8. obj.events=obj.events||{}; //如果obj身上已经有个这属性,就用自己的
    9. obj.events[eventName]=obj.events[eventName]||[]; //如果events里面有内容了,就用自己的
    10. obj.events[eventName].push(fn); //把事件用push的方法添加到数组里
    11. }
    12. //触发自定义事件 触发对象身上的所有事件
    13. function trigger(obj,eventName){
    14. //触发的时候要去看一下对象身上有没有这个事件,事件是放在对象身上的events下
    15. if(obj.events[eventName]){
    16. for(var i=0;i<obj.events[eventName].length;i++){
    17. obj.events[eventName][i].call(obj);
    18. }
    19. }
    20. };
    1. //例子
    2. window.onload=function(){
    3. var box=document.getElementById("box");
    4. customEvent(box,'点击',function(){
    5. console.log('box点击了');
    6. });
    7. customEvent(box,'点击',function(){
    8. console.log('box又点击了');
    9. });
    10. box.onclick=function(){
    11. trigger(box,'点击');
    12. };
    13. }





  • 相关阅读:
    DOM 文本节点 、节点列表
    haslayout综合【转】
    css兼容性详解
    重温textjustify:interideograph
    掌握三点即可轻松打造出良好的交互设计效果
    ASP.NET 中的正则表达式
    Net中的反射使用入门
    ASP.NET2.0页面状态持续[转]
    使用XmlTextWriter对象创建XML文件[转]
    判断SQLSERVER数据库表字段为空的问题
  • 原文地址:https://www.cnblogs.com/CafeMing/p/6637569.html
Copyright © 2020-2023  润新知