采用jQuery动态加载JavaScript文件可以减少js文件大小,提供更快的网页加载速度。jQuery中可以采取$.getScript方法异步加载。使用实例如下,相当于$.ajax方法:
$.getScript('ajax/test.js', function() {
alert('Load was performed.');
});
其它参数可以查看官方的API:传送门
WordPress主题中也可以采取这样的方法动态加载js,实现按需加载,比如在Abook这个主题中,我主要用了两处js的动态加载。
(一)ajax评论绑定和工具栏载入
效果就是访问者写评论的同时,载入ajax评论提交按钮的绑定(为免刷新提交评论准备)和评论工具栏(该工具栏来自qiqiboy的文章)的载入,当准备好以后显示载入完成提示和渐显工具栏。方法如下:
先定义一个函数:
var commentjs=function(){
$.getScript(themeurl+"js/comment.js");//调用评论工具栏和ajax评论提交需要的js
$('#toolBar').animate({opacity: 'show'}, 300);//载入工具栏
$('#comment').unbind('focus',commentjs);//取消自身绑定focus的动作,避免重复加载
}
在用户鼠标焦点到评论框时,执行js的加载和绑定,相关代码如下:
$('#comment').bind('focus',commentjs);//绑定上面的commentjs函数
(二)实时头像相关js的动态载入
实时头像指的是在新访问者第一次在评论处输入邮箱地址时即时的显示所访客的gravatar头像,问题就是负责转换邮箱地址的一段8kb的js有点大,不想让每次都加载这个家伙。以前我有写一篇通过php结合cookie判断新访客来载入这段js的方法:实时头像
现在我用$.getScript方法同样可以实现:
var gravatarjs=function(){
$.getScript(themeurl+"js/realgravatar.js");
$('#email').unbind('focus',gravatarjs);//取消绑定focus的动作
}
$('#email').bind('focus',gravatarjs);
注:代码中themeurl是主题地址。
其实两个js文件并不大,主要是贯彻按需加载js的原则,给有洁癖的同学,折腾完毕~