我根据这个答案编写的这个答案对话框小部件库的演示。
对话框小部件的演示在移动设备上试用,放大并点击链接。
虽然手势事件似乎包含一些关于某些东西的比例因子的元数据,但我们可能会更好地控制并手动找到它。由于我们希望在用户实时移动时保持效果,因此我们需要在每个滚动事件期间重新计算。
window.addEventListener('scroll', function(e){ /* coming next */ })
我们计算缩放因子并将其作为 CSS3 变换应用于重新缩放的元素:
el.style["transform"] = "scale(" + window.innerWidth/document.documentElement.clientWidth + ")";
这会将元素重新缩放回相对于当前视口缩放比例为 1 的缩放比例,但它可能仍然错误地放置在页面上。这意味着我们必须为其位置获取新值。屏幕上实际发生的情况取决于元素的 CSS 位置值,其fixed
行为与移动 Safari 不同absolute
,特别是在移动 Safari 上,fixed
位置在页面缩放时会增加平滑效果,这会因此产生一些不便的问题 - 我建议将 100% 内容高度元素作为relative
预期缩放元素的父元素,然后在脚本中,将元素absolute
放置在父元素内部。以下值适用于此示例演示:
overlay.style.left = window.pageXOffset + 'px';
overlay.style.bottom = document.documentElement.clientHeight - (window.pageYOffset + window.innerHeight) + 'px';
您可能还需要注意使用transform-origin
CSS 属性,具体取决于您希望缩放从哪个锚点生效 - 这对对齐有直接影响。