我在移动网上商店工作并且在实施产品缩放功能时卡住了
单击图像后,允许“用户可扩展”,并将最大比例设置为10.0 当用户使用捏合手势放大产品时,一切正常。 但在关闭缩放的图像后,比例不会重置为1.0。
有没有办法动态重置视口的缩放值。 “初始规模”似乎不起作用,也没有将“最小规模”和“最大规模”重置为1.0
iPhone / iPad上出现问题
似乎有一个解决方案,但我不知道我应该在这篇文章中应用哪个元素: How to reset viewport scaling without full page refresh?
“你需要使用-webkit-transform:scale(1.1); webkit transition。”
但我不知道风格应用于哪个元素。
以下是一些用于说明问题的代码。
在视口的元标记中如下所示:
<meta name="viewport" content="user-scalable=no, width=device-width, height=device-height, minimum-scale=1.0, maximum-scale=1.0" />
页面的其余部分如下所示:
<div id="page">
<img src="images/smallProductImage.jpg">
</div>
<div id="zoom">
<div class="jsZoomImageContainer"></div>
</div>
这是javascript ::
zoom:{
img: null,
initialScreen:null,
load:function(src){
//load the image and show it when loaded
showLoadingAnimation();
this.img = new Image();
this.img.src = src;
jQuery(this.img).load(function(){
zoom.show();
});
},
show:function(){
var screenWidth, screenHeight, imageWidth, imageHeight, scale, ctx;
hideLoadingAnimation();
jQuery("#page").hide();
jQuery("#zoom").show();
jQuery(".jsZoomImageContainer").empty();
this.initialScreen =[jQuery(window).width(), jQuery(window).height()]
jQuery(".jsZoomImageContainer").append(this.img);
imageWidth = jQuery(this.img).width();
imageHeight = jQuery(this.img).height();
scale = this.initialScreen[0] / imageWidth ;
jQuery(this.img).width(imageWidth * scale)
jQuery(this.img).height(imageHeight * scale)
jQuery(".jsZoomImageContainer").click(function(){
zoom.hide();
});
jQuery('meta[name="viewport"]',"head").attr("content","user-scalable=yes, initial-scale:1.0, minimum-scale=1.0, maximum-scale=10.0")
},
hide:function(){
jQuery(".jsZoomImageContainer").empty();
jQuery('meta[name="viewport"]',"head").attr("content","user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0")
jQuery("#zoom").hide();
jQuery("#page").show();
this.img = null;
this.initialScreen = null;
}
}
jQuery("#page img").click(function(){
zoom.load("images/bigProductImage.jpg");
});
答案 0 :(得分:1)
According to ppk,这种视口操作技术适用于除Firefox以外的所有现代浏览器:
<meta id="testViewport" name="viewport" content="width = 380">
<script>
if (screen.width > 740) {
var mvp = document.getElementById('testViewport');
mvp.setAttribute('content','width=740');
}
</script>
似乎关键是在id
标记中设置meta
属性,以便您可以使用JS轻松选择它并替换content
属性的值。
答案 1 :(得分:1)
适用于所有现代浏览器。我在几个网站上做过,一切正常。 但重置不是解决问题的方法。当环境发生变化时,您需要正确更改比例和视口宽度。 当方向改变时和屏幕尺寸改变时,当检测到屏幕尺寸时,您需要更改它。如果获得当前宽度的值,则可以计算比例。 (顺便说一下,当方向是90或-90时,你应该把高度作为宽度)。 例如, 如果主容器的宽度为960px,则w_width是动态获得的当前宽度。
scale=100/100/(960/w_width);
scale=scale.toFixed(2) ;
jQuery('meta[name=viewport]').attr('content', "width="+w_width+", initial-scale="+scale);