0

我的 WP8 应用程序有一个 WebBrowser 控件,用户可以在其中平移和缩放显示的页面,直到他/她看起来不错。我想捕捉当前的缩放和平移,这样我以后可以将同一页面缩放到相同的大小。

我有 wb.InvokeScript() 为我调用任意脚本和 wb_ScriptNotify() 来捕获任何返回的信息,但我无法弄清楚要捕获的页面元素的哪些属性。标准 element.scrollWidth 或 element.offsetWidth 不受缩放影响。读到关于 IE10 属性 element.scale、element.translationX 和 element.translationY 的信息让我暂时感到兴奋,但它们是 GestureEvent 的属性,而不是像 document.documentElement 或 window 这样的 HTML 元素。

谁能提供一些提示?

4

1 回答 1

0

我现在有一个足够好的解决方案。它不漂亮。它适用于带有 IE10 的 WP8,但我怀疑它适用于带有早期版本 IE 的 WP7。

当用户缩放屏幕(通过捏手势)时 window.outer{Width,Height} 会减少缩放因子。如果窗口最初是 1024 宽并且用户缩放 X2,那么 window.outerWidth 现在是 512。并且 window.page{X,Y}Offset 同样会减少相同的因子。但是元素大小(例如 document.body.clientWidth)不会改变。因此,浏览器似乎使窗口变小了,但页面却保持不变。(想想看,这就是变焦的定义......)

但是您不能设置window.outer{Width,Height} 以使浏览器缩放。但是你可以设置document.body.style.zoom。当您进行 CSS 缩放时,window.page{X,Y}Offset 不会缩放(window.outer(Width,Height) 也不会;这是缩放的不同但自洽的定义)。

所以,要跟踪这个:当页面最初加载时(在用户可以缩放之前),

var oldWidth = window.outerWidth;

用户完成操作后,

var newWidth = window.OuterWidth;
var calcZoom = oldWidth / newWidth;
var calcPageXOffset = window.pageXOffset * calcZoom;
var calcPageYOffset = window.pageYOffset * calcZoom;

要在导航回同一 URI 时重新创建缩放和偏移:

document.body.style.zoom = calcZoom;
window.scrollTo( calcPageXOffset, calcPageYOffset);
于 2013-09-12T23:50:59.790 回答