十二月
03

增强用户体验,进一步美化友链页面,添加loading图片

上篇文章我讲了对友情链接页面的美化——自动添加favicon.ico图标,后来在测试中,发现由于icon图标是从各个网站上下载下来的,由于其所处服务器的不同,导致下载速度不一,有时需要很久才可以下载过来,这严重影响了我的网站的加载速度。有没有什么方法能改变这种状况?

我想到两种方法:一是从根源上解决加载速度问题,即在我的主机服务器上缓存这些图标(本站的gravatar头像图标即利用了缓存),但是我代码不熟,估计写不出来,就不试了。二是添加一个loading图标,增强用户体验。最后我选择用这种方法。

刚开始我抱着很简单的想法,直接给img对象添加background-image属性,加入一个loading图片。但是测试后,才发现,由于有些favicon图标是有透明度的,所以此时背后那个loading图标就会显露出来。如下图rrr 所以得在图标加载后隐藏掉那个loading图片。无疑得用JavaScript了。最初我想在全局隐藏,即在footer.php中用JavaScript去除所有img对象的background-image属性,但是这样处理,如果有页面上有一个图标未加载完成,其它已加载好的favicon图标后面的loading图片依然无法消除。

所以我决定利用img对象的onload属性,即图片加载完成后触发的动作。将隐藏函数直接写入img叙述中。

先来看看处理过以后的html源码:

<img onerror="javascript:this.src='/files/links.gif'"
onload="javascript:this.style.backgroundImage='none'"
src="http://bbs.pcbeta.com/favicon.ico" style="background: url(loading.gif) repeat scroll 
center center transparent;"/>

那个onerror知道是什么吧?不知道看我上篇文章。style中的background设置了一个loading图片,即可在图标位置背景处显示。我们要做的就是在图片加载后去除这个图片。onload(它常见于被用于window对象)是我在这里添加的一个对象属性。图片加载完成后触发动作函数javascript:this.style.backgroundImage=’none’,将这个img对象的background-image属性去除,即去掉了后面的loading图片。

至于怎么处理我就无需多讲了吧,就像我上篇文章所讲的添加onerror属性一样加到那里即可。

具体效果请再次移步到我的友情链接页面吧!dd

——————————————————————分割线——————————————————————

有了以上思路,我们可以将这个方法拓展一下。比如,可以给gravatar头像添加这个,甚至侧边栏的wp-recentcomments。方法都是一样的。本站即这样处理了gravatar头像。

再广一点,可以给全站的img对象添加这个。当然,如果只是给文章中图片对象加入loading图片,则只需css中定义好一个class样式,如

.imgload{//手动给每个img对象加入class=imgload
   background:url(loading.gif) no-repeat center center;
   }


img{//全站图片加上loading图片,如果有页面有透明属性图片,则会显示出背后的loading图片
   background:url(loading.gif) no-repeat center center;
   }

以后文章中加入的图片可以给加个class=imgload,即可在图片未加载时显示一个loading图片了。这里没有考虑图片加载后隐藏掉loading图片,因为文章中图片大都是jpg,很少透明吧!呵呵,不排除有人会用有透明的png,gif图片,这些人还是考虑用JavaScript来处理这个问题吧。


——By QiQiBoY

本文标签: , , , ,

分享

本文短网址: http://qiqi.boy.im/1e

这篇文章已经有 16 条评论

Comments (16) Trackbacks (0)
You can leave a response or Trackback this entry .
  1. 万戈 -#1

    真是好方法,我顶你!

  2. 漠天 -#2

    不过图片一直处于“loading”状态啊,莫非我的网速慢。

  3. QiQiBoY -#3

    @ 万戈
    呵呵,都是简单的小技巧。。。

    @ 漠天
    不可能滴 :shock: 。。。你老再试试。。。。

  4. 超人 -#4

    没想到还有这个,,我只加了那个ico

  5. 在路上 -#5

    呵呵,不错!

  6. 笑话 -#6

    不错啊,我先收藏,以后备用~~

  7. mobile -#7

    :grin: :razz: good!

  8. evlos -#8

    汗 ~ 是不是每个img 都要加上一个 javascript:this.style.backgroundImage=’none’ ?

    • QiQiBoY --#1

      @ evlos : 当然,这个是为了让图片在载入完成后自清除背景(我的友链就用到了这个),但有时候图片很小,尤其是评论头像,在脚本起作用前就已经载入了,所以为了清除这部分载入太快的图片的背景,就还需要用jQuery设置网页载入完成后15秒内再全站清除一遍图片背景jquery(‘img’).css(‘background-image’,'none’);

    • evlos --#2

      @ QiQiBoY : 喔,这样,了解了。多谢解释那么详细。

    • QiQiBoY --#3

      @ evlos : 其实这句完成的应该是每个img对象都加入了onload=javascript:this.style.backgroundImage=’none’ ,关键在onload

  9. test -#9

    留言能关闭广告??呵呵 试试。

  10. joyla -#10

    评论加载过慢!

  11. david -#11

    哇。。这个很不错哦。
    等下我也去应用看看行不?

  1. No trackbacks yet.

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: