Panzoom: 手机上的 Chrome v55.02883.91 中的捏缩放损坏

创建于 2016-12-12  ·  20评论  ·  资料来源: timmywil/panzoom

问题的主题

在 Chrome v55.02883.91 上的移动和 Android 系统 WebView v55.02883.91 上的捏缩放坏了
这适用于使用 Chrome(浏览器)的 Android 移动设备和使用 Android System WebView 的 Cordova 应用程序。

您的环境

  • jquery.panzoom.min.js 3.2.2
  • jquery-1.11.1.min.js(用于我的cordova 应用程序)但是演示网站也不起作用。
  • Chrome 坏了(见上面的版本)。 仍然可以在三星手机上使用“互联网”作为浏览器。

重现步骤

  1. 获取三星 Galaxy S6 Edge +(或同等产品)
  2. 将 Chrome 和/或 Android 系统 WebView 升级到 v55 等。
  3. 在演示页面中加载
  4. 尝试放大老虎 - 她打破了伴侣!

预期行为

在以前版本的 Chrome 上(直到 v54,完美运行,即放大!

实际行为

在 v55 上发生的只是平移,而不是缩放,平移的图像有时会在捏合手指之间“跳跃”并在图像在两个手指之间翻转时产生闪烁效果。

最有用的评论

对代码进行了快速修改并注释掉了第 1164 行:

this.panning = true;
允许再次对我进行缩放(并且不影响平移)。 除了初始化之外,我看不到 this.panning 在哪里设置为 false ...... YMMV。

所有20条评论

感谢报告这个问题。 一瞬间我的应用程序停止在缩放上工作,我不知道为什么。

我的应用程序也坏了。 新更新的 chrome 上的奇怪行为(拖动事件似乎滚动窗口,捏合事件......很奇怪)。 其他未更新 chrome 的设备工作正常。 昨晚更新了 chrome,它也坏了。

感谢您打开此问题。
由于这个原因,我的应用程序在 Chrome 桌面上也停止工作。

解决方案 - 添加
touch-action: none;
到您的 panzoom 容器的 css,浏览器不会为该组件执行自己的触摸事件。

这是一个新事物: https :

解决方案 - 添加
触摸动作:无;
到您的 panzoom 容器的 css,浏览器不会为该组件执行自己的触摸事件。

这是一个新事物: https :

不工作。

对代码进行了快速修改并注释掉了第 1164 行:

this.panning = true;
允许再次对我进行缩放(并且不影响平移)。 除了初始化之外,我看不到 this.panning 在哪里设置为 false ...... YMMV。

对代码进行了快速修改并注释掉了第 1164 行:
this.panning = true;
允许再次对我进行缩放(并且不影响平移)。 除了初始化之外,我看不到 this.panning 在哪里设置为 false ...... YMMV。

谢谢,对我有用!

对代码进行了快速修改并注释掉了第 1164 行:
this.panning = true;

哇哦,它是.....

这个“黑客”可以解决问题! 现在适用于 android 55

在 iOS 10.2、Android 53 上重新测试 - 仍然像以前一样工作!

感谢虚拟!

对代码进行了快速修改并注释掉了第 1164 行:
this.panning = true;
允许再次对我进行缩放(并且不影响平移)。 除了初始化之外,我看不到 this.panning 在哪里设置为 >false ...... YMMV。

对我来说很好用...谢谢男人
我正在做我自己的缩放功能,但这暂时救了我……谢谢

在 android google webview 2016 12 月 14 日更新上测试...

对代码进行了快速修改并注释掉了第 1164 行:
this.panning = true;

这部分起作用。 谢谢!

我在注释掉那条线方面取得了部分成功,它现在从左上角而不是交互位置缩放,但这是一个巨大的改进。

看来最新的 chrome 已经改变了 pageX 和 pageY 引用在事件中的位置。
在 chrome 更改之前,所有浏览器都在 event.pageX ....
现在它位于 event.originalEvent.pageX...

我正在研究 panzoom 代码。 要使用鼠标事件使其在 chrome 上工作,请更改以下几行:
线 1191:1192
更改自:
startPageX = event.pageX; startPageY = event.pageY;
到:
if (typeof event.pageX === 'undefined'){ startPageX = event.originalEvent.pageX; startPageY = event.originalEvent.pageY; }else{ startPageX = event.pageX; startPageY = event.pageY; }
在第 1232 行添加:
if (typeof coords.pageX === 'undefined'){ coords['pageX'] = coords.originalEvent.pageX; coords['pageY'] = coords.originalEvent.pageY; }

当我经历它时,更多的触摸事件会发生。

注释掉“this.panning = true;” 修复了它,但它不再那么平滑了,并且在旧设备上缩放变得非常滞后。 我假设注释掉它会使用更多的 CPU 能力,因此旧设备无法跟上。

您是否尝试更新到新版本 (3.2.2) 并注释掉给出的行?

我可以确认这个错误在 v3.2.2 和 Chrome 56 中仍然存在(并且修复有效)。

我不是 100% 确定,但我认为问题是:
该变量( this.panning )似乎是为了防止同时触发_startMove函数的多个实例。 它应该在endEvent事件(第 1249 行)上重置为false ,但我想这不能正常工作(我还没有深入研究以找出原因)。 这可能是 ThorConzales 发现修复会导致性能降低的原因。

替代修复:我发现在_startMove函数的末尾(第 1255 行之后)添加this.panning = false;也可以解决此问题。 我没有在旧设备上测试过,所以我无法确认这是否有助于降低性能,但如果其他人可以,我会很感激。

谢谢@JamesCatt会尝试你的选择。

@timmywil !?

@JamesCatt替代修复对我不起作用并且缩放再次被破坏(由用户报告,因为我没有测试自己的设备)。

评论第 1164 行(this.panning = true)对我不起作用。 我在第 1143 行作弊,更改 moveEvent = 'pointermove' tomoveEvent = 'touchmove',然后就可以了,我不确定它是否会导致任何其他问题。

我找到了一个解决这个问题的黑客。

我们应该在初始化时将options.which-1

$("a.panzoom-elements").panzoom({
  which: -1,
});

__警告__
此 hack 仅适用于触摸设备。 也许这对鼠标不起作用。

@JamesCatt的替代方案对我不起作用。 @hshiozawa的 hack 至少在运行 Android 7.1.2 的 Pixel 上

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

gavJackson picture gavJackson  ·  3评论

YuriGor picture YuriGor  ·  12评论

kylegoines picture kylegoines  ·  4评论

ronvillalon picture ronvillalon  ·  8评论

PrinceDhankhar picture PrinceDhankhar  ·  16评论