对于本网站的图库部分,我希望人们能够查看原始尺寸的屏幕截图。由于本网站的灵活性质,屏幕截图通常会被缩小以适合其列。因此,我将这个解决方案整理在一起。
我的计划是打开一个大小完全适合图像的窗口。在我看来,这很快、简单,而且 UX 完美。您只需执行以下操作
window.open(path-to-image);
实际上,这比这要复杂一些。我们需要传递许多参数来获得我们想要的窗口。主要是,那种 chrome 最少的窗口。顶部有一个关闭按钮,仅此而已。
window.open(path-to-image, null, 'height=y, width=x, toolbar=0, location=0, status=0, scrollbars=0, resizeable=0');
示例
棘手的部分是找出要传递的确切高度和宽度值。您不能只询问图像的大小。您当然可以,但它会说谎。它会告诉你它当前的大小,而不是它自然的大小。
var img = document.getElementById('screenshot');
img.width; // current size, not natural size
img.height; // current size, not natural size
为了获得自然大小,我们将在 JavaScript 的神奇以太中创建一个新图像,将其源设置为屏幕上图像的源,然后测试其宽度和高度。由于它不受页面上 CSS 的影响,它将正确报告。
var img = document.getElementById('screenshot');
var magicEtherImage = new Image();
magicEtherImage.src = img.src;
var padding = 20; // little buffer to prevent forced scrollbars
// Values to use when opening window
var winWidth = magicEtherImage.width + padding;
var winHeight = magicEtherImage.height + padding;
我在我的网站上使用 jQuery,所以最终我的代码是这样的
$(".view-full-size").click(function() {
var mainScreenshot = $("#main-screenshot");
var theImage = new Image();
theImage.src = mainScreenshot.attr("src");
var winWidth = theImage.width + 20;
var winHeight = theImage.height + 20;
window.open(this.href, null, 'height=' + winHeight + ', width=' + winWidth + ', toolbar=0, location=0, status=0, scrollbars=0, resizable=0');
return false;
});
您可以在单个图库页面上看到它的实际效果 像这样.
显然它在移动设备上不会做太多,所以我只是用媒体查询删除了按钮。
我不同意这是一种好的 UX。它只是一个弹出窗口,我必须移动鼠标或使用键盘快捷键才能关闭它。
在我看来,一个具有缩放图像选项的灯箱要好得多。我个人喜欢 prettyphoto 灯箱,它有这个选项。然后它会打开与用户窗口大小相适应的图像,然后有一个按钮,如果需要缩小图像以适应窗口,他们可以按下它以查看全尺寸图像。这实际上只对在窗口而不是全屏模式下运行的人来说是一个问题,但他们可以选择全屏或最大化并调整图像大小。
我很好奇,如果你打开一个分辨率大于用户显示器的图像会发生什么?它被移动用户视为一个选项,但是如果你有一个 1080p 图像,而只有一个较小分辨率的屏幕呢?
我试图找到你的问题的答案。我放置了一个 3000 x 3000 的图像,它在弹出窗口中只显示图像的左上角部分。我的屏幕是 1680×1050。
对我来说,关键是,有一个选项可以查看未缩放的图像。如果它大于用户的浏览器窗口,没关系。无论如何,这可能不会很常见(不会有 3000 像素宽的图像)。我知道,因为它是我的=)
我必须同意 Jon 的观点,使用一个停留在用户当前浏览器窗口内的模态/灯箱似乎更好。
同意…
但除了 UX 之外。您可以在服务器端测量图像大小,并添加两个具有原始图像大小的“data-”属性,这样就不需要进行 JS 请求来获取完整的图像了。
我不得不投反对票。人们习惯了灯箱,弹出一个弹出窗口感觉就像在挖掘互联网恐龙。正如 Jon 指出的,许多灯箱可以选择将图像调整到浏览器窗口大小,并允许用户点击查看全尺寸图像。我从未在我的网站上使用过它,但我喜欢 Shadowbox.js 的“可拖动”功能,它将图像框架调整到浏览器窗口大小,并允许用户点击拖动以在图像周围平移。
此外,Jon 关于图像大于用户屏幕大小的观点很好。您可以修改脚本以将弹出窗口大小限制为用户屏幕大小,但准确测量桌面屏幕可能是一件很棘手的事情(参见此帖子)——获取浏览器窗口大小并以这种方式调整灯箱图像要容易得多。
我也是,我讨厌那种行为,我甚至不喜欢灯箱,但它对我来说更好……好吧,就像所有出现在我面前并干扰我导航的东西,我讨厌这种情况。
我更喜欢一个指向图像的简单链接,这样它就会在同一个选项卡中打开……但是的,我知道我的习惯与所有人都不一样。
你首先强迫人们下载一个全尺寸图像,并依赖浏览器为你的页面调整大小。在我看来,这是不好的做法!
我认为 IMG 元素已经具有 naturalWidth/naturalHeight 属性(已检查 Chrome/Safari/Opera/Firefox)。您可能只需要使用
哦,Tung 说得好。
起初,这似乎有点像恐龙,但我最终同意那些认为这完全可以接受的 UX 的人的观点——全尺寸图像可能非常大,无法适应模态窗口,甚至无法适应整个文档窗口!
也就是说,演示在我的 firefox 8 或 chrome 16 上 *并不*完全有效——我认为 html 窗口或文档主体或某些东西具有某种固有的填充或边距,这使得图像在新标签中缩放到大约 96%。
酷!我非常喜欢它!!!
我认为你这样做的方式没有什么问题,尽管我明白其他人可能会将其用于邪恶的 UX。首先,用户正在创建这个新的弹出窗口,它不是自动弹出的。其次,该按钮上写着“查看全尺寸”,该按钮本身应该告诉用户(它告诉我)图像可能很大(否则就没有必要使用该按钮/缩放图像)。第三,没有人被“强迫”下载它,就像我说的,他们被告知他们正在获取实际大小的图像,并且正在点击按钮查看它。它只有在点击按钮后才会加载,查看大型图片需要大量数据传输。由于这是一个“技术”网站,我认为你可以比普通商业网站上的设计师做得更多。
是否需要点击这里(https://css-tricks.cn/gallery/simple/)的“查看全尺寸”按钮才能获得你在这里解释的示例?
为什么不这样做
<a href=”image.png” target=”_blank”><img src=”image.png”></a>
使用
我喜欢灯箱,我不同意弹出窗口打开,我同意约翰的观点。
你可能应该在 onload 事件处理程序中检查图像尺寸。你立即检查它们,可能是在图像加载之前(除非它已经缓存)。
旧的&不好的略微不同的变体。
为什么重新发明轮子?或者为什么忽略新的东西?在最新的移动设备/平板电脑上,没有图像全尺寸,它可能只是全屏。
好的 UX:默认情况下将图像调整到屏幕大小,并为用户提供一个 1:1 按钮/手势。多年来艰苦的努力和开发告诉我们,这是*the*解决方案。检查。现在让我们继续前进 :)
@Lûhn 德鲁伊 你的方法不会根据图像大小调整新窗口大小。我认为有些人没有理解这项练习的重点。Chris 正在做的是打开一个新窗口,并根据其内容对其进行大小调整:图像。
这可能有用,例如,你想比较三张图像,比如决定要购买哪张打印件,模态窗口允许你通过你选择的三个图像进行切换,或者在屏幕上一次比较三个图像。
仅供参考:你的表格在 Opera 中看起来很棒,但在 IE8 XP/Pro SP3 中失败了。
我不得不为 IE 8(降低表格的复杂性
我认为window.open应该在image.onload函数中触发。
这确实很棒,效果也很好。但在IE6中实现起来相当困难。
在示例链接中,点击“全尺寸”仍然会在最新的Chrome/Mac上显示稍微缩小的图片。将鼠标悬停在图片上会显示一个放大光标,点击后会将其放大到全尺寸。
我不是一个灯箱的狂热粉丝。我喜欢弹出窗口可以轻松地通过快捷键关闭的特性。关闭灯箱需要花费更多精力,因为要找到(通常很小)的关闭按钮。一些灯箱允许通过点击覆盖层来关闭,这很好,但仍然不如传统的Ctrl+W快捷键快!我知道弹出窗口被滥用过,但它们确实有其用途。Twitter就是一个很好的例子。您网站上的官方Twitter按钮会弹出登录和发推的窗口,这非常有效,并且在您完成后可以快速消失。
mike:'我不是一个灯箱的狂热粉丝。'
我也不是。在这里浏览评论很有意思,人们如何将个人偏好误认为“良好的用户体验”——就好像你的整个窗口突然变暗,出现了一个尺寸不可预测的图像,只有通过一些可能足够突出的“x”才能关闭——就好像那特别用户友好一样。
在您链接的示例中,我仍然看到放大镜的加减按钮。
快速问题:您的屏幕分辨率是否小于弹出的图像?
如果我将屏幕分辨率设置为如此低,弹出窗口就会调整大小以适合我的屏幕,从而激活放大镜。
只比高度高出几个像素(我的屏幕高度为900像素,但还有菜单栏和其他东西)。但是,如果我进入全屏模式,就不会出现放大镜。
现有的用户习惯呢?
我认为可以安全地假设,我们大多数人将弹出窗口与垃圾邮件或网络通信(auth.net等对话)联系在一起。我个人倾向于在弹出窗口加载整个页面之前就将其关闭。在这种情况下,我可能会犯错误,肯定会让我感到沮丧。