热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

"舍简求繁"的MSNSpaces图片浏览器

舍,简,求,繁,的,msn,spa

早先微软给我们提供了一个叫MSN Spaces的博客类网站。初看Spaces它具有一些MyMsn的遗风,也支持在网页上自由托拽布局啥的,但微软的很多东西似乎习惯了叫好不叫卖,结果是到目前也并没有太多的人对其感冒。后来不知道怎么搞得国内的几个大blog SP对Spaces还展开了围剿之势,整个搞得乌烟瘴气、乱七八糟的。

    我对Spaces这个服务同样也是不感冒,它那有博客园用起来体贴舒服啊,不过MSN一系列网站在很多设计思想和开发技术上是非常值得我们关注的。在MyMsn出来不久的时候,我写过一篇文章介绍其自由拖放布局设计,"MyMsn动态Resize页框架的布局详解"。现在我们再来看看MSN Spaces里面的一个组件,图片浏览器的实现细节。下图就是Spaces的图片浏览器的工具条,这个图片浏览和XP的资源管理的filmstrip浏览风格有些相像,而操作区又是模仿的WMP10哦。
    MsnPhotoAlbum.png

    单看这个图片浏览器其实并没有什么特别,网上用Javascript写的WMP10风格的视频播放器和flash播放器一把一把的,而且有不少还比这个复杂得多。那么这个图片浏览器的特别之处到底在哪里呢?在上图中随便找一个图片元素,不管是play, stop, forward还是backward按钮,点击右键选:Save Picture As...。这是我们存下来的是什么内容呢?是一个一个小的gif图片吗?当然不是了,不管在这个图片浏览器的任何图片上Save Picture As,我们得到的都是下面这个图片emdgust.gif
   MsnImageMega.gif
    // 实际这个图是一排的,为了不影响blog的排版,我把它弄成两排

    在Windows桌面程序中做过自定义皮肤,以及做过小的2D游戏的朋友一定非常熟悉这个图片的布局格式。可是在网页制作中,我们习惯看到的似乎应该是一大堆小的*.gif图片,每个图片只包含自己的显示内容。在Windows编程中提取这么一个图片中的需要部分,需要对图片进行binary级别的操作,而在Web页面执行环境Browser中,是没有办法进行这样操作的。不过强大的CSS却可以变通的处理这样的图片,使用CSS中的一个叫clip的属性就可以得到一个大图片中,我们想要得到的任何部分来进行指定的显示,虽然我们最终没有物理上切割这个图片,但显示的效果完全可以达到期望。使用CSS里的clip处理图片最经典的应用场景是当初幻宇同志的JS星际里面,在可移物体八方向移动姿态上,他把clip属性的使用发挥到了及至!不过JS星际由于图片资源太多了,一个农民就有八个方向移动、采矿、修理,整个下来全用单独的*.gif小图,幻宇同志肯定早在图片素材处理上就累废了confused_smile.gif

    回头继续说Spaces的图片浏览器,那么clip到底怎么用呢?我们已第一张图片中"Show titles"按钮左边那个CheckBox的图片来举例,看看下面的代码就能清楚多了:

None.gif < IMG  title =Ctrl-Alt-t  style ="DISPLAY: inline; Z-INDEX: 2; FILTER: progid:DXImageTransform.Microsoft.BasicImage(grayScale=1,enabled=false) progid:DXImageTransform.Microsoft.Alpha(Opacity=50,enabled=false); LEFT: -880px; CLIP: rect(0px 893px 13px 880px); CURSOR: hand; POSITION: absolute; TOP: 0px"  src ="http://spaces.msn.com/mmm2005-11-01_10.54/parts/PhotoAlbum/viewer/images/Mega.gif" >

    关键就是:CLIP: rect(0px 893px MsnImageMega.gif13px 880px);,它负责取出了图片中的:。


    Spaces如此实现,且不说计算rect的麻烦,由于clip属性必须在元素的position属性为absolute的情况下才能生效,所以要计算被布局元素的left和top值也不容易。所以实现如此一个图片浏览器,使用的Javascript代码slideshow3.js文件一个就是: 6,288 linesemsmileo.gif。当然我目前觉得能算得上好的一个好处就是可以复用图片,避免众多*.gif小图片对Web服务器带来request负担,别的更大意义我暂时还未成想到。

    带来的负面问题就比较多了,就正如我文章标题中说的这个设计是"舍简求繁"。由于使用绝对定位,每个position:absolute的图片的位置并不固定,下图是该图片浏览器元素布局图:
    MsnPhotoAlbum2.png
    // DIV Elements' border is red, SPAN Elements' border is blue.

    再看前面说的那个CheckBox。刷新一下图片浏览器,或改变browser字体大小,上面提到那个IMG的布局变为了:

None.gif<IMG title=Ctrl-Alt-t style="DISPLAY: inline; Z-INDEX: 2; FILTER: progid:DXImageTransform.Microsoft.BasicImage(grayScale=1,enabled=false) progid:DXImageTransform.Microsoft.Alpha(Opacity=50,enabled=false); LEFT: -906px; CLIP: rect(0px 919px 13px 906px); CURSOR: hand; POSITION: absolute; TOP: 0px" src="http://spaces.msn.com/mmm2005-11-01_10.54/parts/PhotoAlbum/viewer/images/Mega.gif">

    LEFT: -906px; CLIP: rect(0px 919px 13px 906px);

    分析到这里,我也有些迷糊了emdgust.gif,到底M$出于什么目而这么设计实现了这个图片浏览器呢?!


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 使用虚拟机配置服务器
    本文详细介绍了如何使用虚拟机配置服务器,包括购买云服务器的操作步骤、系统默认配置以及相关注意事项。通过这些步骤,您可以高效地配置和管理您的服务器。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
author-avatar
runyuantezhong773
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有