1.封装类似typeof()方法,更详细的返回数据类型
function type(target){
var ret = typeof(target);
var template = {
"[object Array]" : "array",
"[object Object]" : "object",
"[object Number]" : "number",
"[object Boolean]" : "boolean",
"[object String]" : "string",
}
if(target === null) {
return "null";
}else if(ret == "object"){
var str = Object.prototype.toString.call(target);
return template[str];
}else{
return ret;
}
}
2.获取字符串字节长度
function retBytes(str){
var num = str.length;
for (var i = 0; i < str.length; i++) {
if(str.charCodeAt(i)>255){
num++;
}
}
return num;
}
3.给一个有序数组乱序
var arr = [1,2,3,4];
arr.sort(function(){
return Math.random()-0.5;
})
4.在原型链上封装insertAfter()方法
<div><span></span></div>
var div = document.getElementsByTagName('div')[0];
var span = document.getElementsByTagName('span')[0];
Element.prototype.insertAfter = function (targetNode,afterNode){
var beforeNode = afterNode.nextElementSibling;
if(beforeNode == null){
this.appendChild(targetNode);
}else{
this.insertBefore(targetNode,beforeNode);
}
}
var p = document.createElement('p');
div.insertAfter(p,span);
在span标签后插入p标签。
5.封装兼容性方法,求当前滚动条滚动的距离 getScrollOffset()
function getScrollOffset(){
if(window.pageXOffset){
return {
x : window.pageXOffset,
y : window.pageYOffset
}
}else{
return {
x : document.body.scrollLeft + document.documentElement.scrollLeft,
y : document.body.scrollTop + document.documentElement.scrollTop
}
}
}
6.封装兼容方法,返回浏览器视口尺寸 getViewportOffset()
function getViewportOffset(){
if(window.innerWidth){
return {
w : window.innerWidth,
h : window.innerHeight
}
}else{
if(document.compatMode ==="BackCompat"){
return {
w : document.body.clientWidth,
h : document.body.clientHeight
}
}else{
return {
w : document.documentElement.clientWidth,
h : document.documentElement.clientHeight
}
}
}
}
7.给dom对象添加该事件类型的处理函数(兼容性好)
function addEvent(elem,type,handle){
if(elem.addEventListener){
elem.addEventListener(type,handle,false);
}else if(elem.attachEvent){
elem.attachEvent('on' + type, function(){
handle.call(elem);
})
}else{
elem['on' + type] = handle;
}
}
var div = document.getElementsByTagName('div')[0];
addEvent(div,'click',function(){console.log('aaa')})
8.取消冒泡
事件触发顺序:先捕获,后冒泡
function stopBubble (event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}
stopBubble(e);
9.封装阻止默认事件的函数 cancelHandler(event)
function cancelHandler(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
}
event.returnValue = false //兼容IE event.preventDefault() // IE9以下不兼容
10.异步加载js
function loadScript(url,callback){
var script = document.createElement('script');
script.type = 'text/javascript';
if(script.readyState){
script.onreadystatechange = function (){//ie
if(script.readyState == "complete" || script.readyState == "loaded"){
callback();
}
}
}else{
script.onload = function(){//Safari chrome firefox opera
callback();
}
}
script.src = url;
document.head.appendChild(script);
}
loadScript('demo.js' function(){ test() });
11.拖拽
<div style="width: 100px;height: 100px;background: red;position: absolute;top: 100px;left: 100px;"></div>
function drag(elem){
elem.addEventListener('mousedown', function (e) {
var event = e || window.event;
var disX = event.clientX - elem.offsetLeft;
var disY = event.clientY - elem.offsetTop;
document.onmousemove = function (e) {
var event = e || window.event;
var left = event.clientX - disX;
var top = event.clientY - disY;
elem.style.left = left + 'px';
elem.style.top = top + 'px';
};
elem.addEventListener('mouseup', function () {
document.onmousemove = null;
});
});
}
var div = document.getElementsByTagName('div')[0];
drag(div)
12.立即执行函数,解决闭包问题
var li = document.getElementsByTagName('li'),
len = li.length;
for (var i = 0; i < len; i++) {
(function(i){
li[i].addEventListener('click',function(){
console.log(i)
},false)
}(i))
}