Page 44 - JavaScript修炼之道
P. 44

32       第三部分  UI技巧


             任务 14  预载入图片


                 页面可能会提供切换图片的用户交互操作,比如切换为放大或特写的图片、前/后视角图片
             的切换等。这时,由于要用来切换的那张图片需要载入时间,用户会看到瞬间的空白,你肯定不
             希望做成这样。这就需要你预载入那张要用的图片。

                 总体来看,只有三种预载入图片的方法。

                   用JavaScript动态创建带有合适src属性的Image对象:这种方法允许检测预载入图片何时
                   真的被载入了。
                   用CSS隐藏已载入了的图片:这其实就是给要预载入的图片使用隐藏的 <img> 标签。可
                   以隐藏 <img>  标签本身,也可以隐藏这些 <img>  标签的公共容器标签(我更倾向于隐藏
                   公共容器标签)。
                                                        ①
                   使用CSS sprites:如果打算预载入rollover 这类东西或者一批相关联的图片(比如背景、
                   边框、边角),这无疑是更好的办法。
                                                    ②
                 CSS较为直接,不过其控制能力不及JavaScript。右页的标记和脚本代码做了如下假设:假设
             每个所在的 <img> 标签中带有 rel="preloadZoom" 属性的图片在同样的URI下都有一份特写版
             本,其文件名加有 _closeup 后缀。特写版本的图片将被预载入,以实现特写rollover效果。

                 通常在这种情况下用JavaScript比CSS好。因为rollover功能本身要用JavaScript实现,所以我
             们就用JavaScript做预载入(这样的话如果用户环境不支持JavaScript,就没必要载入不会被显示
             的图片了)。此外,用JavaScript预载入可以避免标记及样式膨胀。

                 如果是用JavaScript,只要我们在确定预载入完成之后再做切换,就能避免出现瞬时空白或

             不完整显示。而不使用sprite的CSS则有可能会切换到尚未载入的图片(诚然,这样的可能性其
             实很小)。
                 想要了解更多关于快速图片载入的核心技巧,请看Steve Souder 2009年5月的演讲稿——快速
             图片载入的14条法则。
                                  ③



             ——————————
                ① 指一个图片,当鼠标移到上面就变成另一个图片,鼠标移开又变回来。*
                ② 即“14 rules for faster-loading images”,看看原创的http://www.alistapart.com/articles/sprites和最近的http://css-tricks.com/
                  css-sprites/。Steve Souders同时也维护了一个SpriteMe工具:http://spriteme.org/。
                ③ 参见http://stevesouders.com/docs/wordcamp-20090530.ppt。
   39   40   41   42   43   44   45   46   47   48   49