vI在某种程度上知道这是一个已经被问到但已经没有回答的已知问题,但我希望能有一些额外的见解。
我在网页上的div中有一个简单的SVG图像。我希望能够使用捏合手势缩放图像并让SVG渲染得很清晰。在变焦过程中不需要锐利,但在手势完成后应该很清晰。
我在带有触摸显示器的Windows 8.1计算机上,在iPad上和旧的Android Galaxy Tab上进行测试。在主计算机上,我使用的是IE11和Chrome。为了处理触摸手势,我使用的是Hammer.js。我通过使用jQuery css()函数修改变换CSS来进行缩放(我设置了scale3d和translate3d)。
我电脑上的IE11完全像我想的那样工作。它在整个缩放变焦期间保持SVG图像清晰,无论我何时设置CSS,图像总是清晰的。
当我使用缩放缩放放大时,计算机上的Chrome始终会渲染SVG块。在变焦期间它是块状的,之后不会变得清晰。如果在加载页面(x13)后添加调用以缩放图像,则图像清晰。如果我使用setTimeout()调用来重置缩放,然后在缩放变焦结束后重新缩放图像,则图像会很清晰。
在iPad和Android平板电脑上,无论何时放大代码,SVG都不会急剧渲染。
有没有人知道如何在完成缩放变焦后可靠地结束SVG的清晰渲染?有没有人有更好的解决方案?在手势期间使用SVG viewBox进行缩放和平移不能为我们更复杂的SVG图像提供足够好的性能。我想在手势期间尝试使用硬件加速scale3d / translate3d,然后尝试将其转换为新的SVG viewBox设置,但这是一个挑战,我不确定平移后是否可以正常运行这个完成了。任何指针或想法都非常感谢。
答案 0 :(得分:1)
刚刚尝试回答你的其他SVG Questio n我会尝试一下这个。
迈克尔·穆拉尼(Michael Mullany)认为,GPU翻译永远不会给你一个清晰的形象。这是因为GPU只是将一个像素阵列映射到一个新像素。因为它没有线条或矩形的概念,所以分辨率是由GPU获取图像的时间设置的。 CPU将始终难以及时重新渲染以实现平滑拖动。允许某些浏览器生成清晰图像会发生什么,他们会进行巧妙的操作,比如渲染更多的像素,因此可以在不损失分辨率的情况下进行一些缩放。然而,这些完全不一致,不可能依赖。 我认为它的“正确”解决方案是在捏合或缩放期间使用硬件加速转换进行平移和缩放,然后在翻译完成时刷新视图框而不进行css转换。 需要克服的挑战是
我的工作解决方案是hammerhead2。我首先专注于台式机和Android手机,它接缝为他们工作。为简化问题,缩放始终以屏幕中心为中心。然而,我确实这是目前唯一的解决方案之一。以下是working的示例。