目前本博所用的模板还是半年前从 zblog 转到 WordPress 时自己做的,当时做成以后一直没有怎么修改过,也装了不少插件结果页面打开速度就越来越慢,今天花了一些时间暂时把比较有用的 LightBox 和 TagCloud 直接整合到了模板中,这样可以少装两个插件了,因为一些定制的属性可以直接写模板里面不用存数据库,整合之后效果还是相当明显的:
修改之前的首页加载时间 7s 页面大小 215kb 左右;修改之后的首页加载时间 5s 页面大小 133kb 左右。
目前使用 YSlow 测试按照小型网站及博客标准(Small Site or Blog)可以得到 Grade A 相当不错了,如果将 TagCloud.swf 压缩并使用 GoogleAPI 加载 js 的话理论上页面加载速度还可以更快,暂时还是这样吧,由于浏览器缓存原因页面上的部分内容可能显示错误,建议使用 Ctrl+F5 重新加载一次本站页面更新浏览器缓存。
一、整合 LightBox 插件:
整合 LightBox 相对要容易的多,其实此类插件有很多如 AutoThickBox LightBox2 等等,相关的 js 类库也有很多,我这里选的是 jQuery LightBox Plugin 原因是本站之前已经引入了 jQuery 类库,所以之后添加的 js 都会在 jQuery 的基础上考虑,另外我个人使用过得类似功能的 js 插件中这个插件最小而且功能够用,非常划算。
1、下载 jQuery LightBox Plugin 插件,下载页面:http://leandrovieira.com/projects/jquery/lightbox/;
2、将 js 及 css 引入模板文件,这里具体路径需要根据实际情况调整:
具体路径需要根据实际调整,如果想写的通用可以使用 bloginfo("template_url") 调取主题模板目录然后加上相关文件的相对路径拼出绝对路径使用,上面的引入动作建议放在 head 标签以内。其实这里应该推荐使用 wp_enqueue_script() 函数载入 js 文件。
3、为图片绑定 LightBox 动作,可在直接在你的模板文件或者主题调用的 js 文件中加上以下代码:
$("a:has(img)").lightBox({ imageBlank:"/images/lightbox-blank.gif", imageLoading:"/images/lightbox-ico-loading.gif", imageBtnClose:"/images/lightbox-btn-close.gif", imageBtnPrev:"/images/lightbox-btn-prev.gif", imageBtnNext:"/images/lightbox-btn-next.gif" //这里注意一定不要再加“ , ”号了在 IE6 下会报错; });这里 jQuery 强大的选择器就派上了用场,第一句即为所有含有 img 标签的 a 标签都启动 LightBox 支持,这样设置之后含有 img 标签的链接就会被启用 LightBox 效果了,具体使用时最好限制一下前面的选择器,不然整个页面的图片都启用 LightBox 了。后面的属性定义主要用于 LightBox 效果上的几个图片如 加载图片、向前翻页、向后翻页、退出浏览 等,图片均建议放置在主题里面并保证在调用时的路径正确。
二、整合 TagCloud 插件:
这里其实是整合了 WordPress 的 WP-Cumulus 插件,就是那个漂亮的标签 “云” 下面将直接给 WP 自带的“标签云”小工具加上动画效果。
1、下载 Cumulus 插件,下载页面:http://www.roytanck.com/;里面有示例下载及如何使用的详细说明包括如何修改 wp-cumulus 支持中文 但我个人修改后对于中文的结果不是太理想。
2、拼装所需的字符串,由于 WordPress 默认的标签云字串不适合 cumulus 文件使用,这里需要重新拼装一下:
var txtTag = ''; $('.widget_tag_cloud > div').attr('id','divTag'); $('#divTag > a').each(function(){ txtTag += ''; txtTag += $(this).text().replace(/[^0-9A-Za-z]/ig,''); //这里过滤一下,只保留英文和数字; txtTag += ''; });首先定义了一个临时的中间变量 textTag 为后面使用,然后给 WordPress 默认的标签云 div 定义了一个 id 以方便我们后面调用,之后遍历系统提供的所有标签链接 a 标记,并重新拼装累加,由于未修改过的 cumulus 不支持中文,这里用正则过滤了一下。
3、使用 jQuery.swfObject 加载动画,为了浏览器兼容性我使用 jQuery.swfObject 来加载动画文件,这里并没有使用最新的 swfObject 而是使用 jQuery.swfObject 插件,因为文件更小也可以很好的和 jQuery 兼容,当然你也可以使用 GoogleAPI 加载最新的 swfObject 文件:
$('#divTag').flash({ swf: tPaz + '/images/swfTagCloud.swf', height: 200, width: 200, params:{ wmode:'transparent', menu:'false' }, flashvars:{ tcolor:'0x21759B', tcolor2:'0x333333', hicolor:'0x000000', tspeed:'100', distr:'true', mode:'both', tagcloud:'' + txtTag + ' ' } }); //这里具体的参数均可以根据实际情况修改;具体这里都是 jQuery.swfObject 的用法,这里不再做详细说明,里面的值均可根据自己情况修改,其中 txtTag 的值就是前面我重新拼装的标签链接字符串。
至此,主题修改完成,这样不用安装 LightBox 和 WP-Cumulus 插件,同样可以拥有这两个比较炫的功能,其实也可以使用 wp_enqueue_script("thickbox") 函数来直接调用 WordPress 里面的 ThickBox 插件也是一个不错的选择,而且 ThickBox 本身就比 LightBox 支持更多形式的内容,这里没有使用的原因是本站只有图片的 LightBox 展示需求,而且 ThickBox 展示的图片会被强制缩放以适合窗口,这是我不需要的。
最后补充一下,自 WordPress 2.8 版本开始 WordPress 官方将推荐使用 wp_enqueue_script() 函载入各种 JavaScript 类库,例如使用 wp_enqueue_script("jquery") 默认参数将载入 WordPress 自带的 jQuery 在 wp_head() 位置,如果需要在 wp_foot() 位置载入 js 则需要 wp_enqueue_script("jquery", None, array(), false, true) 这种格式;载入的 jQuery 使用 no conflict 模式,即不绑定 $ 函数控制模式,所以在主题文件里面需要在 wp_head() 函数之前使用 wp_enqueue_script("jquery") 函数,否则将导致不能载入 jQuery 文件,在使用 jQuery 库的时候可能需要以 jQuery(function($){... code here ...}); 的形式来在 js 文件里面重新使用 $ 函数。
wordpress里有类似功能效果的jQuery LightBox Plugin插件吗?
你好,我不是很懂什么wordpress和jquery,但是我看中一个wp主题fotofolio,首页是有幻灯片方式显示图片。但是我看了久e文的主题帮助,愣是没看明白怎么去设置幻灯。后来我在主题文件夹里看见有js文件夹里面有jquery文件,几经了解大概这就是幻灯片的程式吧。但是问题还是我不知道应该怎么在wp后台进行幻灯设置。已经问了很多人但是仍没人能帮助我,不知道BLOG主你能否帮忙解答一下呢?fotofolio主题帮助地址在这http://pupungbp.erastica.com/wordpress-theme/fotofolio-wordpress-theme-for-your-online-portfolio/
利用jQuery SWFObject plugin如何才能检测flash是否下载完毕
在网络上用jQuery SWFObject plugin来播放swf文件时,由于需要从服务器中下载,在下载过程中页面一直处于空白阶段.我该怎么做才能知道swf文件已经下载完了呢?
$(‘a:has(img)’).lightBox({ });
这里没有考虑周全,目前会导致使用 图片 做 logo 的也启用 lightBox 解决方法是前面做一下限制:
$(‘.post a:has(img)’).lightBox({ });
这里的 post 是文章外层 div 的 class 如此限制即可,另外我上面的 lightbox 属性写法在 IE6 下会报错(缺少标识符、字符串或数字)原因是 JSON 最后的一项末尾多了一个逗号,去掉即可。
后续补充:
另外,这里的 swfObject 推荐使用 jQuery.swfObject 插件,一是可以最大限度减小 js 文件大小,也可以使你的 js 更结构化。