给自定义对象加上自定义事件的支持的教程
发布时间:2023-10-14 20:49:00
我一般是不看别人写的代码的,为啥?累!而且这位同志给的还是经过压缩的!汗。。。考我是不是?还有,这位同志也不给个示例的代码,只说是代码没有问题。我努力的试着去“破解”,但是脑细胞死的太快了!在我没有变成白痴之前,我毅然决定,不在往下看下去。不就是给自定的对象加入自定事件的支持吗?我写个示例吧,就算是教程了,如果看不懂,我也没有办法了!我不会傻到给你写好代码,让你拿去卖钱的!
好了,下面是我写的代码,注意看了:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>自定义事件</title> <style type="text/css"> </style> </head> <body> <div id="div1"></div> <div id="div2"></div> <div id="div3"></div> </body> </html> <script language="javascript" type="text/javascript"> function JCEvent(pParent){ var self = this; var body = JCEvent.$(pParent) || document.body; var oOutline = null; var outline_click = function(){ if(self.onClick instanceof Function) self.onClick(); } this.create = function(){ oOutline = JCEvent.$c("DIV"); body.appendChild(oOutline); oOutline.onclick = outline_click; if(typeof this.onCreate == "function") this.onCreate(); } this.getOutline = function(){ return oOutline; } this.setSkin = function(pSkin){ var oldSkin = oOutline.className; oOutline.className = pSkin; if(typeof this.onChangeSkin == "function") this.onChangeSkin(oldSkin,pSkin); } this.getSkin = function(){ return oOutline.className; } } (function($){ $.$ = function(p){ return (typeof(p) != "object") ? document.getElementById(p) : p; } $.$c = function(pTag){ return document.createElement(pTag); } $.$css = function(pKey,pValue,p){ var obj = p ? $.$(p) : this; obj.style[pKey] = pValue; obj.$css = $.$css; return obj; } })(JCEvent); var c1 = new JCEvent("div1"); c1.onCreate = function(){ alert("onCreate事件\n创建 c1"); } c1.onChangeSkin = function(pOld,pNew){ alert("onChangeSkin事件\n设置c1的皮肤:\n新皮肤:" + pNew + "\n旧皮肤:" + pOld); } c1.onClick = function(){ this.setSkin(this.getSkin() == "JCEventDemo" ? "" : "JCEventDemo"); } c1.create(); JCEvent.$css("top","20px",c1.getOutline()).$css("left","100px").$css("backgroundColor","#ff00ff").$css("height","100px").$css("width","100px").$css("position","absolute"); var c2 = new JCEvent("div2"); c2.onCreate = function(){ alert("onCreate事件\n创建 c2"); } c2.onChangeSkin = function(pOld,pNew){ alert("onChangeSkin事件\n设置c2的皮肤:\n新皮肤:" + pNew + "\n旧皮肤:" + pOld); } c2.onClick = function(){ this.setSkin(this.getSkin() == "JCEventDemo" ? "" : "JCEventDemo"); } c2.create(); JCEvent.$css("top","60px",c2.getOutline()).$css("left","200px").$css("backgroundColor","#00ff00").$css("height","100px").$css("width","200px").$css("position","absolute"); var c3 = new JCEvent("div3"); c3.create(); JCEvent.$css("top","70px",c3.getOutline()).$css("left","300px").$css("backgroundColor","#cc6600").$css("height","100px").$css("width","150px").$css("position","absolute"); c1.setSkin("JCEventDemo"); c1.getOutline().innerHTML = "Click me!"; c2.getOutline().innerHTML = "Click me!"; c3.getOutline().innerHTML = "Don't click me!"; </script>
示例中,自定义了一个:JCEvent,c1,c2,c3都是这它的实例。
每个实例都有一个oOutline,我一般用它来做为对象的容器。pParent是用来指示自定义对象在哪里显示的,也就相当于占位符吧,如果不指定,就是document.body。
示例中,我定义了三个自定事件:onCreate,onChangeSkin,onClick
onCreate 在 create方法里触发。
onChangeSkin在setSkin方法里触发。
onClick在oOutline.onclick里触发。
调用顺序:
由于onCreate是在create方法里调用的,所以c1.onCreate要在c1.create()之前声明。
事件的参数,见:
this.setSkin = function(pSkin){
var oldSkin = oOutline.className;
oOutline.className = pSkin;
if(typeof this.onChangeSkin == "function")
this.onChangeSkin(oldSkin,pSkin);
}
this.onChangeSkin(oldSkin,pSkin);
这样,你就可以在每个实例里运用oldSkin和newSkin了。
如:
c1.onChangeSkin = function(pOld,pNew){
alert("onChangeSkin事件\n设置c1的皮肤:\n新皮肤:" + pNew + "\n旧皮肤:" + pOld);
}
另外,示例中:
$.$css = function(pKey,pValue,p){
var obj = p ? $.$(p) : this;
obj.style[pKey] = pValue;
obj.$css = $.$css;
return obj;
}
这一段,写成Object.prototype.$css = function(...)是绝对不成功的,至于为什么,就不是这里的讨论范围。
没话可说了,就留空白吧,看不懂的同志,在补补你们的javascript知识。
说点题外话:不要老是整jQuery,prototype,json等。


猜你喜欢
- 列表的格式:变量A的类型为列表 namesList = ['xiaoWang','xiaoZhang',
- 摘要:本文主要是在pandas中如何对字符串进行切分。我们考虑一下下面的应用场景。这个是我们的数据集(data),可以看到,数据集中某一列(
- 首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下: public class Imag
- 本文实例讲述了PHP实现的DES加密解密类定义与用法。分享给大家供大家参考,具体如下:今天写App接口的时候需要传递加密数据给APP端,于是
- 原因是:It looks like you need to flush stdout periodically (e.g. sys.stdo
- 本文实例讲述了Python实现获取邮箱内容并解析的方法。分享给大家供大家参考,具体如下:# -*- coding: utf-8 -*-fro
- 远程运行最怕断电,训练了几个小时的数据说没就没,或者停止运行。用nohup 记录代码的输出,还可以不受断电的影响。方法1. 用nohup 运
- 安装环境:centos 5.4mysql版本:mysql 5.1.xx 采用rpm直接安装所需软件: xtrabackup 1.2.22 采
- SQL Server中的集合运算包括UNION(合并),EXCEPT(差集)和INTERSECT(相交)三种。集合运算的基本使用1.UNIO
- Swin TransformerSwin Transformer是一种用于图像处理的深度学习模型,它可以用于各种计算机视觉任务,如图像分类、
- W3C终于发布了第一个HTML5草案,大家还沉溺在HTML2XHTML转换的快乐和痛苦中时,却又突然发现,HTML5和XHTML2,到底谁是
- 栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行,常见栈的函数操作包括empty()&n
- 目标在本章中,将了解:如何生成OpenCV-Python bindings如何将新的OpenCV模块扩展到PythonOpenCV-Pyth
- 利用ResNet18进行手写数字识别先写resnet18.py代码如下:import torchfrom torch import nnfr
- reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中。reduce函数先从列表(或序列
- 当您使用FILESYSTEMOBJECT(fso)对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,
- 前言之前在进行深度学习训练的时候,偶然发现使用PIL读取图片训练的效果要比使用python-opencv读取出来训练的效果稍好一些,也就是训
- 本文实例讲述了PHP策略模式定义与用法。分享给大家供大家参考,具体如下:概述策略模式属于对象的行为模式。其用意是针对一组算法,将每个算法封装
- 需求最近公司干活,收到一个需求,说是让手动将数据库查出来的信息复制粘贴到excel中,在用excel中写好的公式将指定的两列数据用updat
- 通过HTTP_USER_AGENT判断用户是从手机上访问,还是电脑IE上访问。 asp代码片段:主要使用了正则匹配手机环境,大家可以补充手机