Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于视口更改现已禁用,如何强制视口';取消缩放';使用javascript?_Javascript_Viewport_Scaling_Pinchzoom - Fatal编程技术网

由于视口更改现已禁用,如何强制视口';取消缩放';使用javascript?

由于视口更改现已禁用,如何强制视口';取消缩放';使用javascript?,javascript,viewport,scaling,pinchzoom,Javascript,Viewport,Scaling,Pinchzoom,我已经实施了一项计划,允许我网站上的访问者点击小照片以查看更大的视图。点击/单击会显示一个新的页面元素,并扩展到屏幕可用的最大尺寸,在那里显示更高分辨率的图像。原因是避免加载高带宽图像,除非访问者感兴趣。一旦显示了更好的高分辨率图像,访问者可以通过手指捏捏手势进一步扩展图像,这是手机的典型操作。问题是,如果访问者确实手动放大了照片,他们会在忽略较大的图像后留下一个恼人的超大页面。无论我做什么,访问者对图像的手动调整都会影响整个页面 在很长一段时间里,有一个合理的解决方案,这是我多年前在stack

我已经实施了一项计划,允许我网站上的访问者点击小照片以查看更大的视图。点击/单击会显示一个新的页面元素,并扩展到屏幕可用的最大尺寸,在那里显示更高分辨率的图像。原因是避免加载高带宽图像,除非访问者感兴趣。一旦显示了更好的高分辨率图像,访问者可以通过手指捏捏手势进一步扩展图像,这是手机的典型操作。问题是,如果访问者确实手动放大了照片,他们会在忽略较大的图像后留下一个恼人的超大页面。无论我做什么,访问者对图像的手动调整都会影响整个页面

在很长一段时间里,有一个合理的解决方案,这是我多年前在stack exchange的某个地方发现的。我会设置一个这样的函数

function resetScreenSize() {
    var viewport = document.querySelector('meta[name="viewport"]');
    if(viewport===null){
        // just for test alert("no viewport meta");
        return;
        }

    var original = viewport.getAttribute('content');
    var forceScale = original+",maximum-scale=1.0";
    viewport.setAttribute('content', forceScale); 
    setTimeout(function() {
        viewport.setAttribute("content", original);
        }, 100);
    
    }
其想法是取消访问者手动缩放的操作,将“最大比例”值1添加到视口中,等待系统稳定下来,然后将视口恢复到其原始设置(没有最大比例)。在用一个简单的按钮测试了这种方法之后,我只是设置了我的代码,以便在访问者关闭缩放图像时自动调用该函数

看来,苹果凭借其无限的智慧,已经决定IOS设备将不再支持“最大缩放”,以及其他一些选项,比如不允许用户缩放。它似乎在其他浏览器上也被屏蔽了,比如IOS上的Chrome。因此,我的计划不再有效。如果访问者选择了一个全尺寸的图像,然后将其进一步展开,我无法将视口设置回正常状态,而不做一些剧烈的操作,例如重新加载页面

我尝试了在stackexchange上发现的其他几种方法,大多数都是从尝试阻止缩放开始的。那不是我想要的


那么我还有别的办法吗?我知道像Facebook这样的社交媒体巨头有一种方法,可以让访问者点击一张图片来显示更大的视图,无论访问者如何手动放大,一旦照片被删除,一切都会恢复正常。但我不知道这是怎么做到的。

不久前我遇到了类似的问题

这里的一个重要技巧是100毫秒的等待。使用0将立即执行代码,而不会实际应用任何内容


现在,如果苹果改变了这些视口参数的规则(可能是因为它被一些人滥用),那么我能想到的一个解决方案就是使用IFRAME。我认为Facebook在任何时候打开一个带有图像(以及旁边的评论)的“弹出窗口”时都会使用这种技术。这使得关闭该窗口并返回到上一个视图非常容易。此外,视口比例因子将在IFRAME中更改,而不是在后面的窗口中更改。所以,你应该得到必要的答案。

我接受这个答案,因为它非常接近于一个我现在知道有效的解决方案,因为你的建议。不同之处在于,我使用单独打开的窗口(而不是Iframe)传递url,其中包含特殊页面的url以及参数(照片的url、标题、颜色等)。当窗口打开时,我解析url以获取数据,并创建一个占据整个屏幕的IMG。还设置了一个主体“onclick”,用于关闭窗口。因此,访客可以按住缩放键,完成后点击关闭窗口。在移动chrome上,它几乎是无缝的,因为新窗口正好出现在眼前。在MobileSafari上,您可以看到新页面翻到视图中,但它仍然有效。如果框架我有点怀疑,但我需要实验。到目前为止,在我发现的所有IFRAME演示中,收缩缩放似乎仍然会影响IFRAME和父屏幕,这正是我想要避免的。但这是正确的。如果您感兴趣,请使用我私下发给您的地址向我发送电子邮件,我将向您发送一个包含当前进度的网站。我认为在桌面上使用单独的窗口可能会有问题,因为在那里它将打开一个与IFRAME不同的新选项卡。也就是说,如果你的访问者主要使用智能手机,那么这当然没什么大不了的。我会检测(或至少尝试检测)访问者何时使用移动设备,在这种情况下,不要启用该功能。这是不必要的,因为第一步是在单击缩略图时进行的,这会导致高清版本扩展窗口限制,而窗口限制通常足够大。在桌面上,第二次单击只会使照片恢复正常。在移动电话上,2秒内的第二次单击会导致新的窗口版本。现在已经足够好了,但是如果我发现I-frame可以(1)全屏显示(2)允许收缩缩放,(3)收缩缩放不会扭曲原始页面,我会切换!太晚了,无法编辑,但实际上我的意思与我在上面评论中的第一句话相反。当我不启用该功能时,它是在非移动的情况下(如带有大屏幕的桌面)。现在应该更有意义了。