最近遇到的一些问题总结
2014-10-25 14:11
267 查看
1.jQuery事件绑定的时候,一定要小心多次绑定和重复绑定。
2.关于IE中image的onload事件失效解决问题,IE会从缓存里获取地址,如果存在的地址就会很快加载完,onload事件就会触发在绑定前。
解决办法,先绑定事件再传地址:
var i = new Image();
i.onload = function(){ }
i.src = url;
3.滚轮事件:
IE/Opera属于同一类型,使用attachEvent即可添加滚轮事件。
Firefox使用addEventListener添加滚轮事件
Safari与Chrome属于同一类型,可使用HTML DOM方式添加事件
window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome
其中除Firefox外其余均可使用HTML DOM方式添加事件,因此添加事件使用以下方式
detail与wheelDelta
判断滚轮向上或向下在浏览器中也要考虑兼容性,现在五大浏览器(IE、Opera、 Safari、Firefox、Chrome)中Firefox 使用detail,其余四类使用wheelDelta;两者只在取值上不一致,代表含义一致,detail与wheelDelta只各取两个值。 //wheelDelta -120是向下,120向上,detail 3是向下,-3向上
这句代码在IE9之前曾被称为世界上最短的IE判定代码。代码虽短但确包含了不少javascript基础知识在里面。在这个例子中代码执行时会先调用数组的toString()方法 ,执行[1,].toString()在IE6,7,8中将会得到”1,”。然后表达式就变为!-”1,”。再尝试把”1,”转换成数值类型得到NaN ,再对NaN取负得到值仍为NaN。最后执行!NaN返回true。下面通过分解这个语句来回顾下代码中所涉及到的javascript知识:
1. 浏览器的数组字面量解析差异
[1,]表示使用javascript的数组字面量定义了一个数组。 在IE6,7,8中数组有两个元素,数组中的值分别为1,undefined。在标准的浏览器中会忽略第一个元素后的undefined,数组只包含一个元素1。
2. 数组的toString()方法
调用数组对象的toString()方法时会对数组中的每个元素调用toString()方法,如果元素的值为NULL或者undefined时会返回空的字符串,然后将得到的每项的值拼成一个使用 逗号”,”分隔的字符串。
3. 一元减号运算符
使用一元减号运算符时如果运算数是数值类型则直接对运算数取负,否则会先尝试把运算数转换为数值类型,转换过程相当于执行Number函数,然后再对得到的结果取负。
4. 逻辑非运算
执行逻辑非运算时如果操作数为NaN、NULL或undefined 时返回 true。
JavaScript可以这么写:
如果从非IE的角度判定,可以省一个比特,因为我们做兼容时,绝大多数情况都是IE与非IE地开工。
通过上面的知识可以得出代码 var ie = !-[1,]; 其实等价于 var ie = !(-Number([1,].toString())); 在IE678中值为true。
因为IE6/7/8都不会忽略[1,].ToString()这个bug,即得到的是”1,”;而-Number([1,].toString())即为-Number(“1,”)得到的结果是NaN;然后!(-Number([1,].toString()))即为!(NaN)即得到true。一切的前提是IE6/7/8都有[1,].ToString()=>”1,”这个bug,而其它浏览器(应该是大部分吧~~)则是[1,].ToString()=>”1″。
5.低版本中IE,别使用透明效果,卡死人。
6.img onerror,用JS加载图片不成功,就删除img对像
imgLoad.onerror = function(){
imgLoad = null;
}
7.点点点
white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
8.获取外联css样式
function returnStyle(obj,styleName){
var myObj = typeof obj == "string" ? document.getElementById(obj) : obj;
if(document.all){
return eval("myObj.currentStyle." + styleName);
} else {
return eval("document.defaultView.getComputedStyle(myObj,null)." + styleName);
}
}
2.关于IE中image的onload事件失效解决问题,IE会从缓存里获取地址,如果存在的地址就会很快加载完,onload事件就会触发在绑定前。
解决办法,先绑定事件再传地址:
var i = new Image();
i.onload = function(){ }
i.src = url;
3.滚轮事件:
IE/Opera属于同一类型,使用attachEvent即可添加滚轮事件。
/*IE注册事件*/ if(document.attachEvent){ document.attachEvent('onmousewheel',scrollFunc); }
Firefox使用addEventListener添加滚轮事件
/*Firefox注册事件*/ if(document.addEventListener){ document.addEventListener('DOMMouseScroll',scrollFunc,false); }
Safari与Chrome属于同一类型,可使用HTML DOM方式添加事件
window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome
其中除Firefox外其余均可使用HTML DOM方式添加事件,因此添加事件使用以下方式
/*注册事件*/ if(document.addEventListener){ document.addEventListener('DOMMouseScroll',scrollFunc,false); }//W3C window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome
detail与wheelDelta
判断滚轮向上或向下在浏览器中也要考虑兼容性,现在五大浏览器(IE、Opera、 Safari、Firefox、Chrome)中Firefox 使用detail,其余四类使用wheelDelta;两者只在取值上不一致,代表含义一致,detail与wheelDelta只各取两个值。 //wheelDelta -120是向下,120向上,detail 3是向下,-3向上
*************************/ var scrollFunc=function(e){ var direct=0; e=e || window.event; if(e.wheelDelta){//IE/Opera/Chrome } else if(e.detail){//Firefox } ScrollText(direct); } /*注册事件*/ if(document.addEventListener){ document.addEventListener('DOMMouseScroll',scrollFunc,false); }//W3C window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome/Safari </script> 4.js判断ie最短的写法(ie678) -----转载------
var ie = !-[1,];
这句代码在IE9之前曾被称为世界上最短的IE判定代码。代码虽短但确包含了不少javascript基础知识在里面。在这个例子中代码执行时会先调用数组的toString()方法 ,执行[1,].toString()在IE6,7,8中将会得到”1,”。然后表达式就变为!-”1,”。再尝试把”1,”转换成数值类型得到NaN ,再对NaN取负得到值仍为NaN。最后执行!NaN返回true。下面通过分解这个语句来回顾下代码中所涉及到的javascript知识:
1. 浏览器的数组字面量解析差异
[1,]表示使用javascript的数组字面量定义了一个数组。 在IE6,7,8中数组有两个元素,数组中的值分别为1,undefined。在标准的浏览器中会忽略第一个元素后的undefined,数组只包含一个元素1。
2. 数组的toString()方法
调用数组对象的toString()方法时会对数组中的每个元素调用toString()方法,如果元素的值为NULL或者undefined时会返回空的字符串,然后将得到的每项的值拼成一个使用 逗号”,”分隔的字符串。
3. 一元减号运算符
使用一元减号运算符时如果运算数是数值类型则直接对运算数取负,否则会先尝试把运算数转换为数值类型,转换过程相当于执行Number函数,然后再对得到的结果取负。
4. 逻辑非运算
执行逻辑非运算时如果操作数为NaN、NULL或undefined 时返回 true。
JavaScript可以这么写:
var ie = !-[1,]; alert(ie);
如果从非IE的角度判定,可以省一个比特,因为我们做兼容时,绝大多数情况都是IE与非IE地开工。
var notIE = -[1,];if(-[1,]){ alert("这不是IE浏览器!"); }else{ alert("这是IE浏览器!"); }
通过上面的知识可以得出代码 var ie = !-[1,]; 其实等价于 var ie = !(-Number([1,].toString())); 在IE678中值为true。
因为IE6/7/8都不会忽略[1,].ToString()这个bug,即得到的是”1,”;而-Number([1,].toString())即为-Number(“1,”)得到的结果是NaN;然后!(-Number([1,].toString()))即为!(NaN)即得到true。一切的前提是IE6/7/8都有[1,].ToString()=>”1,”这个bug,而其它浏览器(应该是大部分吧~~)则是[1,].ToString()=>”1″。
5.低版本中IE,别使用透明效果,卡死人。
6.img onerror,用JS加载图片不成功,就删除img对像
imgLoad.onerror = function(){
imgLoad = null;
}
7.点点点
white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
8.获取外联css样式
function returnStyle(obj,styleName){
var myObj = typeof obj == "string" ? document.getElementById(obj) : obj;
if(document.all){
return eval("myObj.currentStyle." + styleName);
} else {
return eval("document.defaultView.getComputedStyle(myObj,null)." + styleName);
}
}
相关文章推荐
- 最近工作中遇到ElasticSearch一些问题总结
- 最近做项目遇到的一些问题总结
- 最近工作中遇到ElasticSearch一些问题总结
- 最近在ArcGIS Engine开发中关于调用gp工具过程出现COM 组件的调用返回了错误 HRESULT E_FAIL 错误的解决方法 和 学习oracle中遇到的一些问题总结
- 最近遇到的一些问题总结
- APICloud框架——总结一下最近开发APP遇到的一些问题 (三)
- APICloud框架——总结一下最近开发APP遇到的一些问题 (二)
- 最近遇到的一些小问题总结
- 最近使用Qt遇到的一些小问题解决办法总结
- 对最近遇到的一些BT问题总结
- 最近遇到不少客户提出关于PP账户名字需要更改,如何更改的问题。因此在此做个简单的总结,希望能帮到一些朋友!
- 总结一下最近面试遇到的一些问题吧
- APICloud框架——总结一下最近开发APP遇到的一些问题
- 最近使用XML过程中一些问题的总结
- WTL学习过程中遇到的一些问题总结
- 最近用了IE6下的滤镜,遇到的几个问题总结:
- 开发CRM中遇到的一些问题总结
- 来点入门级的:最近遇到的一些小问题及经验
- 最近遇到的一些问题及发现
- 最近要做个项目,遇到一些关于ansys问题,看看兄弟们能否帮我解决?