网站建设

JS+CSS让网站嗨起来,博客要被玩坏了!

Jager · 12月4日 · 2014年 5250次已读

最开始在陌小雨那就看到了这个功能,觉得挺好玩,但是也没想继续深入。昨天在无主题博客看到他分享了这个功能的代码之后,觉得可以试试。

用了之后,发现他改进之后的代码存在几个缺憾:

①、他加入了随机播放功能,但是多次点击启动,将出现多首歌曲叠加播放 BUG(嗨过头了);

②、这个功能一旦启用,就必须刷新页面来停止,否则得等到歌曲播放完成才会停止“颤抖”;

③、如果用了 CDN,那么 js 会托管到 CDN,新增或更改歌曲就变得非常麻烦,因为缓存刷新很蛋疼;

④、启动之后,高潮来得有点慢,15.5s 才会看到明显效果(强迫症)。

一、功能改进

我部署了这个功能之后,改进了一下:

①、加入移除机制,当第二次启动功能时,将移除上一次加载内容,从而避免了歌曲叠加播放的窘迫;

②、加入停止函数 stopCrazy(),只要执行这个函数就能停止效果,怎么发挥就看你的了;

③、将歌曲赋值数组从 js 里面分离出来,直接放到页面中,后续只要修改页面代码,就能即时生效;

④、我将 15.5s 的延迟改成 5s,让高潮效果提前,没办法现代人大部分喜欢快节奏。。。

刚刚无主题博主小武也说了,可以监听整个页面的双击动作来停止效果,提议不错。我考虑将停止函数绑定到鼠标双击、键盘 ESC 上面,下面开始 DIY!

二、功能部署

①、CSS 代码

@charset "utf-8";body{-webkit-backface-visibility:hidden}.mw-strobe_light{position:fixed;width:100%;height:100%;top:0;left:0;z-index:100000;background-color:rgba(250,250,250,0.8);display:block}.mw-harlem_shake_me{transition:all 0.8s ease-in-out;-moz-transition:all 0.8s ease-in-out;-webkit-transition:all 0.8s ease-in-out;-o-transition:all 0.8s ease-in-out;-ms-transition:all 0.8s ease-in-out;animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;-webkit-animation:spin 1s infinite linear;-o-animation:spin 1s infinite linear;-ms-animation:spin 1s infinite linear}.mw-harlem_shake_slow{transition:all 3.2s ease-in-out;-moz-transition:all 3.2s ease-in-out;-webkit-transition:all 3.2s ease-in-out;-o-transition:all 3.2s ease-in-out;-ms-transition:all 3.2s ease-in-out;animation:spin 4s infinite linear;-moz-animation:spin 4s infinite linear;-webkit-animation:spin 4s infinite linear;-o-animation:spin 4s infinite linear;-ms-animation:spin 4s infinite linear}.mw-harlem_shake_me{-webkit-animation-duration:.4s;-moz-animation-duration:.4s;-o-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.mw-harlem_shake_slow{-webkit-animation-duration:1.6s;-moz-animation-duration:1.6s;-o-animation-duration:1.6s;animation-duration:1.6s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.flash,.mw-strobe_light{-webkit-animation-name:flash;-moz-animation-name:flash;-o-animation-name:flash;animation-name:flash}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px)}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0)}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px)}20%,40%,60%,80%{-moz-transform:translateX(10px)}}@-o-keyframes shake{0%,100%{-o-transform:translateX(0)}10%,30%,50%,70%,90%{-o-transform:translateX(-10px)}20%,40%,60%,80%{-o-transform:translateX(10px)}}@keyframes shake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}.shake,.im_baked{-webkit-animation-name:shake;-moz-animation-name:shake;-o-animation-name:shake;animation-name:shake}.swing,.im_drunk{-webkit-transform-origin:top center;-moz-transform-origin:top center;-o-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;-moz-animation-name:swing;-o-animation-name:swing;animation-name:swing}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0%)}15%{-webkit-transform:translateX(-15%) rotate(-4deg)}30%{-webkit-transform:translateX(12%) rotate(3deg)}45%{-webkit-transform:translateX(-9%) rotate(-2deg)}60%{-webkit-transform:translateX(6%) rotate(2deg)}75%{-webkit-transform:translateX(-3%) rotate(-1deg)}100%{-webkit-transform:translateX(0%)}}@-moz-keyframes wobble{0%{-moz-transform:translateX(0%)}15%{-moz-transform:translateX(-15%) rotate(-5deg)}30%{-moz-transform:translateX(12%) rotate(3deg)}45%{-moz-transform:translateX(-9%) rotate(-3deg)}60%{-moz-transform:translateX(6%) rotate(2deg)}75%{-moz-transform:translateX(-3%) rotate(-1deg)}100%{-moz-transform:translateX(0%)}}@-o-keyframes wobble{0%{-o-transform:translateX(0%)}15%{-o-transform:translateX(-15%) rotate(-5deg)}30%{-o-transform:translateX(12%) rotate(3deg)}45%{-o-transform:translateX(-9%) rotate(-3deg)}60%{-o-transform:translateX(6%) rotate(2deg)}75%{-o-transform:translateX(-3%) rotate(-1deg)}100%{-o-transform:translateX(0%)}}@keyframes wobble{0%{transform:translateX(0%)}15%{transform:translateX(-15%) rotate(-5deg)}30%{transform:translateX(12%) rotate(3deg)}45%{transform:translateX(-9%) rotate(-3deg)}60%{transform:translateX(6%) rotate(2deg)}75%{transform:translateX(-3%) rotate(-1deg)}100%{transform:translateX(0%)}}.wobble,.im_first{-webkit-animation-name:wobble;-moz-animation-name:wobble;-o-animation-name:wobble;animation-name:wobble}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.1)}100%{-webkit-transform:scale(1)}}@-moz-keyframes pulse{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.1)}100%{-moz-transform:scale(1)}}@-o-keyframes pulse{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.1)}100%{-o-transform:scale(1)}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.1)}100%{transform:scale(1)}}.pulse,.im_blown{-webkit-animation-name:pulse;-moz-animation-name:pulse;-o-animation-name:pulse;animation-name:pulse}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05)}70%{-webkit-transform:scale(.9)}100%{-webkit-transform:scale(1)}}@-moz-keyframes bounceIn{0%{opacity:0;-moz-transform:scale(.3)}50%{opacity:1;-moz-transform:scale(1.05)}70%{-moz-transform:scale(.9)}100%{-moz-transform:scale(1)}}@-o-keyframes bounceIn{0%{opacity:0;-o-transform:scale(.3)}50%{opacity:1;-o-transform:scale(1.05)}70%{-o-transform:scale(.9)}100%{-o-transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;transform:scale(.3)}50%{opacity:1;transform:scale(1.05)}70%{transform:scale(.9)}100%{transform:scale(1)}}.bounceIn,.im_trippin{-webkit-animation-name:bounceIn;-moz-animation-name:bounceIn;-o-animation-name:bounceIn;animation-name:bounceIn}

以上 css 代码保存为 hi.css 上传到网站即可,然后记住这个 css 文件的 http 路径,后面的 js 中需要填写。

②、主 JS 代码:

function hig(){(function(){function c(){ $(".mw_added_css").remove();var e=document.createElement("link");e.setAttribute("type","text/css");e.setAttribute("rel","stylesheet");e.setAttribute("href",f);e.setAttribute("class",l);document.body.appendChild(e)}function h(){var e=document.getElementsByClassName(l);for(var t=0;t<e.length;t++){document.body.removeChild(e[t])}}function p(){var e=document.createElement("div");e.setAttribute("class",a);document.body.appendChild(e);setTimeout(function(){document.body.removeChild(e)},100)}function d(e){return{height:e.offsetHeight,width:e.offsetWidth}}function v(i){var s=d(i);return s.height>e&&s.height<n&&s.width>t&&s.width<r}function m(e){var t=e;var n=0;while(!!t){n+=t.offsetTop;t=t.offsetParent}return n}function g(){var e=document.documentElement;if(!!window.innerWidth){return window.innerHeight}else if(e&&!isNaN(e.clientHeight)){return e.clientHeight}return 0}function y(){if(window.pageYOffset){return window.pageYOffset}return Math.max(document.documentElement.scrollTop,document.body.scrollTop)}function E(e){var t=m(e);return t>=w&&t<=b+w}function S(){$("audio").remove();var e=document.createElement("audio");e.setAttribute("class",l);e.src=i;e.loop=false;e.addEventListener("canplay",function(){setTimeout(function(){x(k)},500);setTimeout(function(){N();p();for(var e=0;e<O.length;e++){T(O[e])}},5000)},true);e.addEventListener("ended",function(){N();h()},true);e.innerHTML=" <p>如果你正在读这篇文章,那是因为你的浏览器不支持音频元素。我们建议你得到一个新的浏览器。</p> <p>";document.body.appendChild(e);e.play()}function x(e){e.className+=" "+s+" "+o}function T(e){e.className+=" "+s+" "+u[Math.floor(Math.random()*u.length)]}function N(){var e=document.getElementsByClassName(s);var t=new RegExp("\\b"+s+"\\b");for(var n=0;n<e.length;){e[n].className=e[n].className.replace(t,"")}}var e=30;var t=30;var n=350;var r=350;var i=CrazyMusic[Math.floor(Math.random()*Number(CrazyMusic.length))];var f=hicss;var s="mw-harlem_shake_me";var o="im_first";var u=["im_drunk","im_baked","im_trippin","im_blown"];var a="mw-strobe_light";var l="mw_added_css";var b=g();var w=y();var C=document.getElementsByTagName("*");var k=null;for(var L=0;L<C.length;L++){var A=C[L];if(v(A)){if(E(A)){k=A;break}}}if(A===null){return}c();S();var O=[];for(var L=0;L<C.length;L++){var A=C[L];if(v(A)){O.push(A)}}})()};function stopCrazy(){ $("audio").remove();$(".mw_added_css").remove()}

将以上 js 代码保存为 crazy.js 或直接添加到网站的其他全局 js 文件中均可。如果想改回 15.5s 的延迟,只需要在上述代码中搜索 5000,然后改回 15500 即可。

最新补充:发现很多朋友不知道引入 js 是干嘛,有的甚至完全忘记上面这个引入主要 js 的步骤,再次说明下,将上述 js 代码保存为 crazy.js,然后上传到主题根目录,最后在主题目录下的 header.php 或 footer.php 中添加如下代码即可:

<script type='text/javascript' src='<?php echo get_template_directory_uri(); ?>/crazy.js'></script>

不是 WordPress 主题的,可以自行上传到网站任意目录,然后如上引入到网站页面当中即可,要注意下文件的路径。

③、页面 JS 代码

<script type="text/javascript">
/* 定义 hi.css */
var hicss="此处请填写 hi.css 的地址,比如 https://zhang.ge/hi.css";

/* 定义歌曲数组 */
var CrazyMusic=[
    "歌曲地址一",
    "歌曲地址二",
    "歌曲地址三",
    "歌曲地址四"
    /* 更多歌曲,请按照如上格式添加,英文逗号隔开,添加完后记得删除中文占位,比如只添加了一个歌曲地址,那么其他【歌曲地址二、三、四、。。。】和多余逗号都删除掉!!!*/
];

/* 监听到 ESC 或鼠标双击动作,将停止所有效果 */
function KeyMonitor() { 
    if (event.keyCode == 27) {stopCrazy()}; 
 } 
$(document).bind("dblclick",stopCrazy);
$(document).bind("onkeydown ",KeyMonitor);
</script>

i. 将第一步中的得到 hi.css 地址填写到代码中;

ii. 将你喜欢的歌曲上传到网站或七牛空间,然后将歌曲的 http 地址替换上述代码的【歌曲地址】即可。

Ps:将这个 JS 代码添加到网站任意位置均可,比如 footer 或 head,不启动功能时,并不会加载文件,请放心添加!

④、触发按钮

部署完疯癫功能之后,咱们还需要添加一个启动按钮,启动代码示例如下:

<a title="亲,点我放松一下吧~!(单击启动,双击或 ESC 停止)" id="hig" href="javascript:void(0);" onclick="hig();" ondblclick="location.reload(true);">点我嗨一下</a>

将以上代码添加到网站的合适位置即可,样式可以进一步 DIY 一下,比如张戈博客是弄了一个图片启动按钮,放到了网站右下角的滚动条的右侧。

三、文件下载

为了方便部署,张戈特意打包了所有代码和文件,不过要记得修改代码中的 CSS 和歌曲地址哦!

好了,这个功能就分享到这,顺便偷偷说一声,这个功能应该适用任何建站程序,符合 html 协议即可,一般人我还不告诉他!

50 条回应
  1. 舍力博客 2014-12-4 · 13:44

    貌似第一个签到!

    • 小武 2014-12-4 · 13:50

      晚一步. . 下次努力 :grin:

  2. 小武 2014-12-4 · 13:46

    必须来坐个沙发. . :oops:

  3. avatar
    Jager 2014-12-4 · 16:53

    貌似我是问题终结者。 :cool:

  4. avatar
    Jager 2014-12-4 · 17:11

    刚刚JS代码中有个变量定义错了:应该是var f=hicss;手误写成了var f=htcss; 自己改下

  5. PHP二次开发 2014-12-4 · 22:19

    Σ( ° △ °|||)︴,好吧!

    • avatar
      Jager 2014-12-5 · 11:31

      :lol: 无语了吧

  6. 陌小雨 2014-12-4 · 22:36

    哈哈,这就是分享的力量呀!

    • avatar
      Jager 2014-12-5 · 11:30

      感谢分享~

  7. 香港虚拟主机 2014-12-5 · 10:37

    能让网站更生动,也能让读者有个好的视觉享受!

    • avatar
      Jager 2014-12-5 · 11:31

      没事放松一下~

  8. 最新hosts 2014-12-5 · 11:12

    用的虾米插件实现,空间不够大,又怕外链不稳定

    • avatar
      Jager 2014-12-5 · 11:30

      免费的七牛你不用?

      • Google上不去真蛋疼 2014-12-5 · 19:18

        现在七牛只做图床,别的不敢用,百度太笨了,我也不灵光。

  9. 极品飞鸽 2014-12-5 · 11:28

    这么玩也太high了嘛,还是简单点好

    • avatar
      Jager 2014-12-5 · 11:30

      萝卜白菜,各有所爱,多折腾多学习。

  10. 皇都网络 2014-12-6 · 9:45

    赞 这个类似于css压缩?

  11. 瑾瑜 2014-12-6 · 17:48

    哈哈,这个有点逗,不过停止后依然有个别内容在抖动啊。

    • avatar
      Jager 2014-12-6 · 21:06

      没有吧?不过双击之后,页面会乡下滚动~

      • 瑾瑜 2014-12-6 · 21:10

        win8.1 IE11,不会向下滚,但是有个别抖动停不下来,chrome可以停,但滚动。

        • avatar
          Jager 2014-12-6 · 21:13

          看来是兼容性问题,先不管了~

  12. 必分享 2014-12-7 · 18:40

    不错,是个好东西。

  13. 黑色网魂 2014-12-18 · 16:02

    真好玩,可惜我不懂代码,弄不到自己博客去

  14. 同盟源 2014-12-21 · 20:42

    厉害厉害

  15. 第6团队 2014-12-24 · 20:55

    discuz论坛用不了

  16. 北京SEO 2014-12-27 · 16:51

    已经移植成功,感谢分享!

    • avatar
      Jager 2014-12-27 · 17:28

      貌似压缩报错了。自己检查吧~

  17. 七支剑 2015-1-6 · 15:18

    找到这东西了 我也试一下去

  18. 挖资源部落 2015-3-31 · 0:20

    博主的东西就是不错!收藏了!

  19. 麦购穿衣打扮 2015-4-30 · 11:00

    哥们,布好了,点击 嗨一下 没反应呢,能1解答下吗?www.mygo123.com 网站底部

    • avatar
      Jager 2015-4-30 · 11:40

      没有加载js。
      注意文章中:”将以上js代码保存为crazy.js或直接添加到网站的其他全局js文件中均可。“

      • 麦购穿衣打扮 2015-4-30 · 12:07

        这一步没漏啊,我把它存为crazy.js,添加到主题的/scripts/目录没用,直接添加到主题的jquery.js、jquery.jplayer.min.js、html5.js这些中还是没用。是不是不适用所有的主题呢?

        • avatar
          Jager 2015-4-30 · 12:30

          你会不会玩?保存为crazy.js,你得引入到网站当中。实在不行你就装我开发的插件:https://zhang.ge/4718.html

          • 涂涂小窝 2015-8-4 · 10:59

            会不会玩,人家也是虚心请教,我测试了,反复检查了代码,如上代码确实不成功。部分步骤与方法有所遗漏,非插件模式。

            • avatar
              Jager 2015-8-4 · 12:46

              反复检查?你网站主要js都没引入吧?http://www.tutuxiaowo.com/css/hi.css这个地址也404,真不知道是怎么看文章的。
              跟上面楼主一样,不会折腾硬要用代码部署,怎么引入js也不清楚,为什么不考虑用插件呢?

  20. 七支剑 2015-6-19 · 14:11

    $(document).bind("dblclick",stopCrazy);
    这行 ReferenceError: stopCrazy is not defined 是什么原因

    • avatar
      Jager 2015-6-19 · 18:56

      主要JS没有载入,缺少stopCrazy函数

  21. 奇营销强子 2015-8-10 · 22:02

    这个功能看着不错,回头整到我网站试试看,随你便问下张哥,底部这个随机推荐浮动栏怎么弄得,吧嗨起来放一起还是挺好的。

  22. 美容护肤小窍门 2015-11-3 · 20:18

    为什么ESC关不了 双击可以

  23. 晓庄 2015-12-25 · 12:46

    Jager大大,除了引入crazy.js以后,还需要引入其他js么?我在header引入了,也没404。
    但是会提示$(document).bind(“dblclick”,stopCrazy);
    这行报错ReferenceError: stopCrazy is not defined。报错的意思是没有stopCrazy 函数,但是我在此之前已经引入了crazy.js了啊。

    • 晓庄 2015-12-25 · 13:12

      好了,弄好了。最后还是引入了个jquery.min.js才行。

      • avatar
        Jager 2015-12-26 · 10:44

        。。文章没说清楚
        代码中有 $()的JS都是要Jquery支持的,不过一般主题每个页面都应该引入了JQ才对。

        • 晓庄 2015-12-26 · 12:10

          嗯,我这主题可能被改了,这JQ还是我自己丢进去的。
          还有啊,因文章模板问题啊,有些模板是不会嗨,能说下这嗨的运行原理嘛。
          我这JS弱爆了,改半天没改成功,也看得不是很懂。

          • avatar
            Jager 2015-12-27 · 23:37

            我哪知道什么原理,我只是互联网的搬运工,二次修改尚可。

            • 晓庄 2015-12-27 · 23:44

              嗯哼,没事了。 :mrgreen: 已经改好了。
              也谢谢Jager大大~ :smile:

  24. 尘埃 2016-2-27 · 6:43

    :sad: 哎!不知道怎么搞的,我按照你的方法加到网站程序中,刚开始没有反应,后来我改了那个CSS开头的字符集为gb2312后又生成页面就好了,很酷炫,可惜当我双击停止后,又修改了一下页面代码位置之后就再也没有反映了,这个功能我非常喜欢,麻烦你能不能帮我看看是什么原因吗?我的网站正在备案,所以设置了访问权限,你可以输入帐户名admin密码admin123进去帮我看看好吗?万分感谢! :smile:

    • avatar
      Jager 2016-2-27 · 12:27

      可以试试插件版本:https://zhang.ge/4718.html

      • 羚羊博客 2016-6-28 · 10:09

        谢谢张博主,你的插件太棒了,一步到位,让我这个Begin用户体验到了你的技术。大二学生党,我是一个迷茫的大学生

  25. 久久好鞋 2016-7-3 · 0:32

    :evil: 这个东西也太6了吧!