当您拉伸窗口并因此更改“剧院”的大小时,图像会更改大小。由此我只能假设“剧院”设置为特定大小,并且图像设置为具有最大宽度或最大高度,因此它会随着外部元素(剧院)的大小而扩展或收缩. 这部分是用 CSS 完成的。
我认为屏幕尺寸检测与 DOMDimensions ( http://pastebin.com/Biz9ntMj ) 和 DimensionTracking ( http://pastebin.com/Ys72APyL ) 函数有关。此外,任何点击都会被“primer”(https://gist.github.com/376039)脚本拦截,然后通过 AsyncRequest(如果需要)路由操作,然后根据 JOSN 响应做出反应。我的屏幕尺寸只显示链接和最终图像( _n.jpg )的一种尺寸,但我假设好像是由 javascript 处理的,那么这就是它如何处理尺寸,否则(如果 javascript 关闭或一些东西)它只会回到他们对一个尺寸适合所有 720 x 960 的最佳猜测,然后使用上面的 css 来强制调整大小。
编辑
关于 CSS...
使用 CSS,您可以为包含图像的块元素设置高度(特定或相对于屏幕大小,无论您喜欢什么),然后将该图像设置为具有max-height/width
此高度/宽度,而不是定义的高度/宽度。这样,图像将保持其纵横比,但仍会扩展和收缩到容器内允许的大小。可以在这里看到一个例子:http: //jsfiddle.net/tV6gG
在 javascript 上...
当在页面上单击任何内容(并且 javascript 正在运行)时,它会通过上面提到的“primer”脚本被捕获(可以在这里看到完整版本 - http://pastebin.com/BwhKJ14d) - (有关这方面的更多信息,请参阅http://www.facebook.com/video/video.php?v=596368660334&ref=mf)。该脚本然后检查rel
点击事件的属性(参见第 28 行),然后根据该属性决定要“引导加载”的内容(参见第 52 行)。从这里它加载了一个处理所有图像类型的东西的功能( http://pastebin.com/eGgtz4dT )的野兽。
在这个脚本中,有几个函数看起来可能与图像大小有关,其中一个是 getCurrentImageServerSizeDimensions(参见第 218 行)。还有其他关于舞台尺寸的东西,但我猜一个很重要。据我所知,该脚本随后将编译大量数据,并且它们对服务器的调用与使用常规 href 不同。
来自源的未转义href:
http://www.facebook.com/photo.phpfbid=10152228292295554&
set=t.516587895&type=3&src=http://sphotos-g.ak.fbcdn.net/hphotos-ak-
snc7/374008_10152228292295554_643067794_n.jpg&size=720,960&theater
发送到 pagelet 的未转义实际请求(有关 pagelet 的更多信息,请参见上面有关 BigPipe 的视频)制造商:
http://www.facebook.com/ajax/pagelet/generic.php/PhotoViewerInitPagelet?
ajaxpipe=1&ajaxpipe_token=AXhGMa1SEXnChIug&no_script_path=1&data=
{"fbid":"10152228292295554","set":"t.516587895","type":"3",
"size":"720,960","theater":null,"firstLoad":true,"ssid":1354797924833}
&__user=6462456246&__a=1&__adt=2
虽然它们确实包含大部分相同的信息,但您可以清楚地看到请求正在被捕获,因此(如果需要)可以通过它发送任何更正的信息(图像大小)。
关于前面的脚本...... DOMDimensions 脚本是一组函数,
老实说,函数标题(、、、和)很好地解释了getElementDimensions
这些函数。有关这些单独功能实际作用的更多信息,我建议您查看它们并检查您没有获得的任何基本 javascript 功能。它看起来并不太复杂。
DimensionTracking 脚本似乎只是调用并保存页面生成的数据。
如果似乎每 100 毫秒(参见第 17 行)、窗口调整大小(参见第 18 行)或窗口焦点(参见第 18 行)重新评估尺寸。
getViewportDimensions
getViewportWithoutScrollbarDimensions
getDocumentDimensions
measureElementBox
getViewportDimensions()
/ajax/dimension_context.php
总而言之,我认为你可以通过使用上面的 CSS 方法来做重要的事情(减去寻找实际不同的图像的事情),以使大量图像适合正确的舞台尺寸。