利用JQuery前台切换网站的样式实现

本文说的是在WordPress中怎样利用JQuery在网站的前台切换样式的方法。或者这篇文章的方法大家可能不是太需要,因为我觉得这是解决我被主题样式折腾到差不多分裂的原因结果的最后手段。但如果你想为网站添加多一些样式,让访客选择;又或者你想调整一下网站的样式,而在决定前让访客先体现的话,这也是一个很好的办法,省去总是切换主题的痛苦。

切换效果参照本站。

1. 切换样式的按钮代码:

<div id="style-switch">
<ul>
<li><a href="#?style=white" rel="white" class="styleswitch white">Day</a></li>
<li><a href="#?style=black" rel="black" class="styleswitch black">Night</a></li>
</ul>
</div>

上面的按钮代码请根据你的网站设计放置。比如在我这里是放到header.php文件中的。

2. 样式引用代码:

<?php if($_COOKIE['style'] == 'black') : ?>
<link rel="stylesheet" type="text/css" href="<?php bloginfo('template_url'); ?>/black.css" title="black" media="screen" />
<link rel="alternate stylesheet" type="text/css" href="<?php bloginfo('template_url'); ?>/white.css" title="white" media="screen" />
<?php else : ?>
<link rel="stylesheet" type="text/css" href="<?php bloginfo('template_url'); ?>/white.css" title="white" media="screen" />
<link rel="alternate stylesheet" type="text/css" href="<?php bloginfo('template_url'); ?>/black.css" title="black" media="screen" />
<?php endif; ?>

在这里我简单说明一下:

  1. 因为在后面的js代码中会于浏览器的cookie部分写入一个cookie记录“style”,所以在这里我会让浏览器根据记录进行样式的调用(这里为两个样式,一个“white”,另一个“black”)。
  2. 当浏览器存在“style”的cookie记录,并记录为“black”时候,则先读取black.css文件,这可以说是主样式文件;及后再读取辅助样式(就是供需要切换的样式),white.css。
  3. 如果浏览器没有任何“style”的样式cookie记录,或者“style”的样式cookie记录为“white”时候,则主题先读取white.css文件,再读取black.css文件。
  4. 在这里需要补充的是,使用PHP的cookie读取会比使用js的cookie读取更为有效。因为我原来是利用js进行cookie的读取动作,但由于js的加载还是需要那么一点时间,所以在切换样式后的页面浏览中并不完美。如果你以前发现选择黑色主题后,再浏览页面,会出现先是一瞬间的白色主题,然后才是黑色主题的现象。这就是我要说明的情况了。现在使用PHP代码则不再存在这个不足。

3. Javascript部分代码:(注意前提是你已经在网站中调用了JQuery库)

(function($)
{
$(document).ready(function() {
$('.styleswitch').click(function() {
$('body').append('<div id="overlay" />');
$('#overlay')
.css({
display: 'none',
position: 'absolute',
top:0,
left: 0,
width: '100%',
height: '2000%',
zIndex: 1000,
background: 'black'
})
.fadeIn(500);
switchStylestyle(this.getAttribute("rel"));
$('#overlay').fadeOut(500);
return false;
});
});
function switchStylestyle(styleName)
{setTimeout(function() {
$('link[@rel*=style][title]').each(function(i)
{
this.disabled = true;
if (this.getAttribute('title') == styleName) this.disabled = false;
});}, 500);
createCookie('style', styleName, 365);
}
})(jQuery);

上面的部分是点击动作部分。我在中间添加了一段#overlay的块样式是为了在切换过程中制作一个灯箱效果,这样会比突然的切换来得更为自然。

然后还需要添加产生cookie记录的功能代码:

function createCookie(name,value,days)
{
if (days)
{
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

还有添加删除cookie记录的功能代码:

function eraseCookie(name)
{
createCookie(name,"",-1);
}

到此,完成上面三部后就可以了,希望大家看得明白。

分类:theme skill, WordPress;标签:, , , ;收藏本文的永久链接

22 Responses to “利用JQuery前台切换网站的样式实现”

  1. welee 回复此留言 2009/06/11 21:26 #comment-7908

    好,终于分享了,沙发!

  2. 爱月 回复此留言 2009/06/12 02:29 #comment-7913

    这玩意得收藏起来了~然后爱月哪天搞个
    00:00-03:00 03:00-06:00 06:00-09:00
    09:00-12:00 12:00-15:00 ...

  3. Jinwen 回复此留言 2009/06/11 21:52 #comment-7909

    @welee 终于啊?我可是花了几天时间调试的哦,折腾了我不少。

  4. zwwoooooo 回复此留言 2009/06/12 03:20 #comment-7914

    不知啥时自己能折腾这个。

  5. ZH CEXO 回复此留言 2009/06/12 04:13 #comment-7915

    这个是真好用,得收藏,再用,你的jQ水平日渐提高啊

  6. muki 回复此留言 2009/06/12 04:27 #comment-7918

    我也要收藏起來:)
    謝謝你的分享喔

  7. motta 回复此留言 2009/06/12 04:35 #comment-7921

    太赞了!!! 收藏慢慢学习~ XD

  8. dev 回复此留言 2009/06/12 04:54 #comment-7926

    能添加时间自动换吗 白天显示白天的主题 晚上显示晚上的主题 然后在来个春夏秋冬!昨天我在网上没找到适合你白天主题的背景图片,建议你找个风景好的地方自己拍两张 一张晚上的 一张白天的!

  9. 卢松松 回复此留言 2009/06/12 07:09 #comment-7928

    这个功能很实用啊!

  10. Jinwen 回复此留言 2009/06/12 08:21 #comment-7929

    @爱月 这么多也太累了吧。
    @dev 真谢谢你哦。我也在找,其实适合不适合也看个人的,你希望是张怎样的图片呢,找述下吧。还有,如果添加时间切换的话,那还不如让访客自己选择来得自由点,总不能象近日的“绿X-XXXX”吧,呵呵。

  11. 吖Bee 回复此留言 2009/06/14 12:15 #comment-7988

    哇,好酷~根据时间变也不错啊~

    • 大脚 回复此留言 2010/02/05 17:28 #comment-12613

      如何实现根据时间变换呢?

    • Jinwen 回复此留言 2010/02/05 18:08 #comment-12614

      @大脚 这样:
      < ?php
      $t = date("H:i:s");
      if($t > "06:00:00" && $t < "17:00:00" ) : ? >
      =样式路径=
      < ?php endif; ? >

  12. eddie 回复此留言 2009/06/16 07:41 #comment-8056

    呵呵厉害了
    js我好菜要好好跟你学学

  13. 随影 回复此留言 2009/06/17 11:14 #comment-8108

    学习了 。。

  14. willin 回复此留言 2009/06/19 18:48 #comment-8230

    汗~ 我自己寫過的代碼和你有出入, 學習ing...

  15. 大脚 回复此留言 2010/02/05 17:26 #comment-12612

    完全不会。。呵可菜鸟啊。。 :cry:

  16. lee 回复此留言 2010/03/23 12:34 #comment-13492

    请问如何切换主题?

  17. 余乐 回复此留言 2010/04/07 23:26 #comment-13756

    很好哈......
    我的博客 http://blog.sina.com.cn/yu519491605
    有空来坐坐!!!

  18. eallion 回复此留言 2010/04/13 05:09 #comment-13837

    挺好看。

  19. SEO工程师 回复此留言 2011/03/28 17:19 #comment-18355

    :smile: 学习了。。


The trackbacks and pingpacks: