序言:
想必大家都有在编写avascript时 明明在谷歌上的代码没什么问题,但是到了IE上就会报错 那今天就和大家聊聊可能出现的兼容问题以及使用其他API时可能出现的问题。
事件兼容
ele.addEventListener( type , function(evt){
var e = evt || event;}
目标函数兼容:
ele.addEventListener( type , function(evt){
var e = evt || event;
var target = e.target || e.srcElement;}
事件监听兼容:
可以通过typeof关键字避免报错,完成兼容
if(typeof ele.addEventListener === "function"){
ele.addEventListener( type , callback );
}else{
ele.attachEvent("on" + type , callback);
}
移出监听兼容:
和事件监听兼容同样采用typeof方法实现
if(typeof ele.addEventListener === "function"){
ele.addEventListener( type , callback );
}else{
ele.attachEvent("on" + type , callback);
}
阻止事件冒泡的兼容:
if(typeof e.stopPropagation === "function"){
e.stopPropagation();
}else{
e.cancelBubble = true;
}
}
使用其他API时注意的问题
1.开启定时器前最好先关闭定时器
解释:因为一个页面可能存在成百上千个定时器,可能会造成开启关闭的混乱,虽然每个定时器都有不同的id,也可能想要开启时 它并没有被关闭,可能会造成不必要的BUG,因此建议开启定时器前最好先关闭定时器。
2.arguments.callee 可以代表当前函数但是兼容性不好,因为在“”严格模式“”下是不能使用的,注意使用场景。
3.阻止默认事件的几种方法:
javascript vpid(0)用于标签属性之中
例:<a href="javascript vpid(0)">
可以组织a标签的默认属性。
e.preventDefaule()也可以阻止默认属性,躲在老版本IE中使用。e.returnValue =false 老版本IE中使用,阻止默认事件
4.想要实现元素跟随鼠标移动时,在获取设置元素位置时别忘了加“px”
例;
box_ele.style.left = e.clientX + "px";
box_ele.style.top = e.clientY + "px";
5.事件的自定义触发:
有时需要多次事件触发时,根据程序逻辑,不能触发已存在绑定事件,于是需要自行创建事件,手动触发事件
例:下方为创建自定义事件以及触发该事件过程
var m_e = new Event("blur");
ele.dispatchEvent(m_e);
6.需要深刻理解函数中的this指向
理解透彻函数中的this指向,对于我们在编程过程中显然是意义巨大的,
普通函数中的this指向,调用函数的对象
name=20
function foo(){
this.name=name;
console.log(this.name)
} foo();//this.name=20
显然这里的this是指向window 的
var obj = {
a: 1,
b: function() {
a=3
console.log(this.a);// this.a=1
}
}
obj.b();
显然这里的thiss是指向调用对象obj的。
总结:
其实this还有一些相关内容,例如箭头函数中的this指向,改变函数中的this指向,这里暂时不展开了 ,关注我,下周我们继续聊。