几年前,我们只要写Javascript,必须使用一些常用的
功能,如
注册侦听器和attachevent,而不是技术和功能是非常先进的,但一些基本的
任务,
原因是各种
浏览器之间的差异。这么长时间和技术的不断改进后,仍有一些Javascript
函数,几乎所有的Web
程序员来说是必不可少的,或
性能或功能。
消抖功能防止高频电话
当那个函数是一个函数,有必要提高任务
执行事件驱动的性能。如果你使用滚动,
调整大小,关键*等事件触发执行的任务,你不使用拖放功能,你犯了重大
错误,较低
频率的功能,消抖,可以使你的代码更高效:
返回一个函数,只要它继续被调用,就不会
被触发。函数在停止调用后将被调用。
n毫秒。如果立即 通过,则触发
而不是前沿,尾随。
功能消抖(函数,等等,立即){
VaR超时;
返回函数(){
VaR上下文=,=
参数args;
var后面的函数(){()
超时=空;
如果(!func.apply(立即)
背景下,args);
};
var callNow =直接!超时;
ClearTimeout(超时);
超时= setTimeout(后来,等);
如果(callNow)func.apply(上下文,args);
};
};
使用
无功myefficientfn =消抖(函数()){
你做的那些繁重的
工作 },250);
Window.addEventListener('resize ',myefficientfn);
当那个函数只允许你提供一个回调函数在给定的时间间隔来减少其频率执行。这样的限制尤为重要,当高频触发时。
设置时间/频率循环
检测功能
上面提到的消抖功能是由一个事件触发的援助。但有时没有这样的事件是可用的,所以我们只能写一个函数来
检查它的每一次。
函数轮询(FN、回调、错误、超时、间隔){
VaR StartTime =(新的
日期()GetTime());
VaR(PI = window.setinterval功能()){
如果(Math.floor((的时间)(新)-(开始时间) / 1000)<=超时){
如果(FN()){
回调();
}
{人}
window.clearinterval(PI);
(错误);
}
},区间)
}
一次功能,
禁止重复调用,只允许执行一次。
很多时候,我们只需要某种形式的动作必须执行一次,如果我们限制使用onload执行只有当加载完成。以下功能允许你的
操作被执行一次,它将不会重演。
函数一次(FN,上下文){
VaR结果;
返回函数(){
如果(FN){
结果:fn.apply(上下文| |这个参数);
FN =空值;
}
返回结果;
};
}
使用
无功canonlyfireonce =一次(函数()){
console.log('fired!);
});
(canonlyfireonce); / /发射!
(canonlyfireonce); / / Nada
这一次函数确保您提供的函数只执行一次,并防止重复执行。
得到一个链接getabsoluteurl绝对
地址 获得一个链接的绝对地址并不像你想象的那么简单,下面是一个非常实用的函数,它可以根据你
输入的相对地址获得绝对地址。
无功getabsoluteurl =(函数(){()
Var a;
返回函数(URL){
如果(!一document.createelement)=(A);
a.href =网址;
返回a.href;
};
});
使用
GetAbsoluteUrl( /东西);
一个标签链接在这里用来生成完整的绝对URL,这是非常可靠的。
判断一个Javascript函数是
系统固有功能原产
许多第三方js
脚本将新函数引入全局变量,有些甚至覆盖了系统的本机函数。下面的
方法用于检查本机函数是否:
(函数(){())
用于解析内部的值
VaR方法= object.prototype.tostring;
用于
解决反编译的源/功能
无功fntostring = function.prototype.tostring;
要检测主机使用的构造函数(Safari真的键入数组> 4;具体)
无功rehostctor = / ^ {对象。+构造函数 } $ /;
编译一个正则表达式使用公共/
本地方法作为模板。
我们选择了`对象# toString `因为有 / OD的机会不被搞砸了。
var = regexp(renative + ^
`对象# toString `一连串 / /强迫
字符串(字符串)
任何特殊字符 / /逃避规则
更换( / {。* + ^美元(| { } { } / } / g), $')
对` toString ` / /
替换提到保持模板的通用。*
像'替换'来
支持像犀牛这样的环境…添加额外信息
作为方法的差异。 /此类
更换( / toString |(功能)*(为)= (| 1(= })/ g,1美元。*)+$
);
功能是本地的(值){
变量
类型=类型的值;
返回类型= = 'function
使用`功能# toString `绕过价值 /自己` ` toString方法
避免伪造。
renative.test(fntostring.call(值))
回退到主机对象,因为某些环境将表示
像类型数组一样作为DOM /方法的东西可能不符合
本地
模式。正常
(价值:类型= 'object' rehostctor.test(tostring.call(值))假| |);
}
但是,您希望导出
module.exports =原产;
}();
使用
是本地的(警告); / /真的
原产(mycustomfunction); / /假
这个方法不是那么简单,但它仍然可以完成任务!
创建一个新的Javascript的CSS规则insertrule
有时我们使用CSS选择器(如
文档。querySelectorAll)得到一个列表,然后改变风格,他们每个人都在变。事实上,这不是一个有效的方法。有效的方法是用Javascript构建一个新的CSS样式规则:
一个更好的表对象
表=(函数){
构建 /样式
VaR的风格= document.createelement('style);
style.setattribute(媒体,'screen);
style.appendchild(document.createtextnode('));
Document.head.appendChild (style);
并返回一个单独的函数
Return function (rule) {style.sheet.insertRule (rule, style.sheet.cssRules.length);};
});
作为函数调用
表(。统计{
位置:相对;顶部:0px } );
这些做法的效率非常高。在某些场景中,如使用Ajax加载新的HTML,使用上述方法,您不需要操作新加载的HTML内容。
判断一个
网页元素都有某种
属性和风格matchesselector
功能matchesselector(EL,选择器){
var p = element.prototype;
var = p.matches p.webkitmatchesselector p.mozmatchesselector p.msmatchesselector | | | | | | | |(功能){
返回{ }。indexof.call(document.queryselectorall(S),= = 1);
};
返回f.call(EL,选择器);
}
使用
MatchesSelector(document.getelementbyid('mydiv),'div.someselector {一些属性=真})
这是7个Javascript函数,每个Web程序员都应该知道如何使用它们。
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。