Dojo:自定义组件

简介: 上一篇Dojo:主题(theme)切换以及Div蒙板覆盖中使用到了一个组合的功能块。 由一个div作为容器,一个img作为图片展示,以及一个div作为蒙板的组合效果。 其中,蒙板div的动作是由Dojo实现的。

 

上一篇Dojo:主题(theme)切换以及Div蒙板覆盖中使用到了一个组合的功能块。

由一个div作为容器,一个img作为图片展示,以及一个div作为蒙板的组合效果。

其中,蒙板div的动作是由Dojo实现的。

由于具备可重用性,所以计划将这个组合提取成一个Dojo的widget。

步骤如下:

1、创建该widget,目录在js/widget/image/imageWitchCover.js,内容如下:

imageWitchCover.js
//声明自己输出的类名 
dojo.provide("image.imageWithCover"); 
//声明自己依赖的类名
dojo.require("dijit._Widget"); 
dojo.require("dijit._TemplatedMixin"); 

dojo.require("dojo.fx"); 
         
        
//dojo.declare定义控件类,第一个参数:类名,第二个参数:父类数组,第三个参数:类的prototype 
dojo.declare("image.imageWithCover",[dijit._TemplatedMixin,dijit._Widget], 
{ 
    image:'',
    width:'200px',
    height:'160px',
    margin_left:'10px',
    label:'',
    onclick:'',
    constructor:function(params,node) {
        image=params.image;
        if(params.width!=undefined){
            this.width=params.width;
        }
        if(params.height!=undefined){
            this.height=params.height;
        }
        if(params.margin!=undefined){
            this.margin_left=params.marginLeft;
        }
        if(params.label!=undefined){
            this.label=params.label;    
        }
        if(params.action!=undefined){
            this.onclick=params.action;
        }
    },
    postCreate:function(){
        var innerHTML="";
        innerHTML+="<div style=\"position:relative;width:"+this.width+";height:"+this.height+";float:left;margin-left:"+this.margin_left+";\">";
        innerHTML+="<img src=\""+this.image+"\" style=\"position:absolute;left:0;top:0;width:"+this.width+";height:"+this.height+";\"/>";
        innerHTML+="<div style=\"position:absolute;left:0;top:0;width:"+this.width+";height:"+this.height+";background-color:#333;opacity:0.0;\"onClick=\""+this.onclick+"\">";
        innerHTML+="<b style=\"position:absolute;left:38%;top:40%;font-size:15px;color:#FFF;\">"+this.label+"</b></div>";
        innerHTML+="</div>";
        this.domNode.innerHTML=innerHTML;
        
        var d=this.domNode.children[0].children[1];
        console.log(d);
        d.onmouseover=function(){
            dojo.animateProperty({ 
                 node: this, 
                 duration:1000, 
                    properties: {  
                        opacity: 0.5  
                    } 
            }).play();
            };
        d.onmouseout=function(){
            dojo.animateProperty({ 
             node: this, 
             duration:1000, 
                properties: {  
                    opacity: 0 
                } 
            }).play();
            };
    } 
} 
); 

控件名为"image.imageWithCover",有6个参数,分别为:

image:'',
width:'200px',
height:'160px',
margin_left:'10px',
label:'',
onclick:''

构造函数结构如下:

constructor:function(params,node) {}

params是记录的属性集合

既是如果在tag里添加了一个属性:image="1.jpg"

则参数params.image就会有值"1.jpg"

 

postCreate:function(){}

这是创建后执行的方法。初始化内容即可写在这里。用于定义本widget的内部结构。

 

2、使用该widget,需要注意三处:

1)Dojo的引用位置,需要声明modulePaths,来指定寻址位置(类似于java的CLASSPATH):

<script src="/lib/dojo/dojo/dojo.js" djConfig="isDebug:true,parseOnLoad:true,modulePaths:{image:'/dojo/js/widget/image'}"></script>

2)加载"image.imageWithCover"控件:

dojo.require("image.imageWithCover"); 

3)使用控件div:

<div dojoType="image.imageWithCover" width="200px" height="160px" action="alert('1')" image="/dojo/resource/image/firstTheme/preview.jpg" label="红色"> </div>

目录
相关文章
|
JavaScript
自定义事件在 Vue.js 组件中的应用
自定义事件在 Vue.js 组件中的应用
41 1
|
1月前
Vue2使用v-model封装ElementUI_DatePicker 日期选择器组件
本文介绍了如何在Vue2中使用v-model封装ElementUI的DatePicker日期选择器组件,并实现自定义属性和方法的结合使用,包括禁用日期、格式化日期等功能。
46 2
Vue2使用v-model封装ElementUI_DatePicker 日期选择器组件
|
2月前
|
计算机视觉
ElementUI——vue2+element-ui 2.x的动态表格和表单
ElementUI——vue2+element-ui 2.x的动态表格和表单
69 1
|
2月前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
128 0
|
4月前
|
JavaScript
Vue.js中实现自定义组件的双向绑定
Vue.js中实现自定义组件的双向绑定
|
5月前
|
JavaScript
Vue.js 组件 - 自定义事件
Vue.js 组件 - 自定义事件
526 0
|
5月前
|
JavaScript
【双向绑定极简版代码】在Vue.js的自定义组件中实现v-model=“”双向绑定
【双向绑定极简版代码】在Vue.js的自定义组件中实现v-model=“”双向绑定
|
前端开发 JavaScript 开发者
React-组件-CSS-In-JS
React-组件-CSS-In-JS
68 1
|
JavaScript
vue.js 兄弟组件传值
vue.js 兄弟组件传值
|
JavaScript 前端开发
react 在js文件中实现和jsx页面的双向绑定
react 在js文件中实现和jsx页面的双向绑定