传统事件绑定、DOM2级事件绑定、以及IE事件绑定区别

传统与DOM2级事件绑定的区别:

1.传统事件绑定同一事件句柄只能绑定一个事件函数,绑定多个后面的会覆盖前面的;DOM2级支持同一元素的同一事件句柄可以绑定多个监听函数;

传统:window.onnload=function(){

    alert("a");

    }

window.onnload=function(){

    alert("b");

    }

打印 b

//跨浏览器事件绑定
function  addEvent(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element.attachEvent("on"+type,handler);
}else{
element["on"+type]=handler;
}
}

addEvent(window,"load",function(){
 
alert("1");
});
addEvent(window,"load",function(){
 
alert("2");
});

打印:1  2  IE打印:2,1

DOM2级与IE区别:

1.同一事件句柄绑定的多个监听函数,DOM2级按正序触发,IE按反序触发,例子如上

2.如果在同一元素的同一事件句柄上多次注册同一函数,DOM2第一次注册后的所有注册都被忽略;IE不会忽略

window.οnlοad=function(){
var oBtn=document.getElementById("button");
addEvent(oBtn,"click",fn);
addEvent(oBtn,"click",fn);
addEvent(oBtn,"click",fn);
}
function fn(){
alert("button");

打印一次button,IE打印三次

3.在函数体内不必用使用event = event || window.event; 来标准化Event 对象;IE的attach中本身就传递了event

window.οnlοad=function(){
var oBtn=document.getElementById("button");
addEvent(oBtn,"click",fn);
 
}
function fn(e){
alert(e.clientX);  //e 不必做兼容

 

3.this传递:attach方法事件处理程序会在全局作用域下运行,IE的this传递传递代表的是window

解决方法:对象冒充

function addEvent(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element.attachEvent("on"+type,function(){    //加个匿名函数
handler.call(element);                       //对象冒充
});
}else{
element["on"+type]=handler;
}
}

function fn(){
//alert(e.clientX); //事件不必做兼容
alert(this.value);

handler.call(element,123,445);       //默认第一个参数传给this,后面的可以通过形式参数来获取 

function fn(a,b){
//alert(e.clientX); //事件不必做兼容

        alert(a);  //123

        alert(b);  //456
alert(this.value);

 

使用了call 传递this,带来的诸多另外的问题:1.无法标准化event;2.无法删除事件。
导致的原因很明确,就是使用了匿名函数。标准化event 可以解决,无法删除事件就没有办
法了,因为无法确定是哪一个事件。
obj.attachEvent('on' + type, function () {
fn.call(obj, window.event);
});

function fn(e){
alert(e.clientX); //事件不必做兼容


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
d3.js是一个用于数据可视化的JavaScript库,它提供了丰富的API和功能,可以帮助开发者创建交互式和动态的数据可视化图表。下面是d3.js的中文手册的介绍: 1. 选择元素:d3.js提供了强大的选择器和操作DOM元素的方法,可以通过选择器选取元素,并对其进行各种操作和样式设置。 2. 数据:d3.js可以将数据与DOM元素进行,使得数据和元素之间建立起关联关系,方便进行数据驱动的可视化操作。 3. 比例尺:d3.js提供了多种比例尺,用于将数据映射到可视化空间中,例如线性比例尺、时间比例尺、颜色比例尺等。 4. 坐标轴:d3.js可以帮助创建坐标轴,包括x轴和y轴,并提供了丰富的配置选项,可以自义坐标轴的样式和刻度。 5. 图表生成:d3.js支持创建各种类型的图表,包括柱状图、折线图、散点图、饼图等,开发者可以根据需求选择合适的图表类型。 6. 过渡效果:d3.js提供了过渡效果的支持,可以实现平滑的动画效果,使得数据的变化更加生动和直观。 7. 事件处理:d3.js可以处理各种交互事件,例如鼠标点击、鼠标移动等,开发者可以通过事件处理函数来响应用户的操作。 8. 数据操作:d3.js提供了丰富的数据操作方法,包括数据过滤、排序、分组等,方便对数据进行预处理和转换。 9. SVG绘图:d3.js使用SVG(可缩放矢量图形)来绘制图表,SVG具有良好的可扩展性和互动性,可以实现复杂的图形效果。 10. 插值器:d3.js提供了多种插值器,用于在动画过程中平滑地计算属性值的过渡,例如颜色插值、数值插值等。 以上是d3.js的一些主要功能和API介绍,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值