在 iPad 上用 CSS3 过渡替换 JQuery animate,为什么元素在过渡时消失?

发布于 2024-12-11 09:37:52 字数 2035 浏览 0 评论 0原文

我提前道歉,这是我的第一个问题。

我有一个简单的滑块,由多个列表项 (li) 组成,每个列表项都包含一个 Google 图表。每个 Google 图表本质上都是一个 iFrame,其中包含构成图表的 SVG 元素。每个图表都有特定的设置大小。使用 CSS3 过渡是因为 jQuery 在 iPad 上慢得像糖蜜,尤其是 iPad 1:

<ul class = "slider">
   <li>{Google Chart 1}</li>
   <li>{Google Chart 2}</li>
   <li>{..and so on}</li>
</ul>

我在 iPad 上有以下代码,绑定到用于推进滑块的链接按钮

var toMove = container.find('ul.slider');

//For purposes of this example I'm setting this to 300. In reality this is calculated by the index of the slider and the width of each chart

var pixelsToMoveBy = 300; 

toMove.css('-webkit-transition', '-webkit-transform 0.5s linear, margin-left 0.5s linear');
toMove.css('-webkit-transform', 'translate3d(' + pixelsToMoveBy + 'px, 0px, 0px)');

这在桌面 Chrome 和 Safari(Mac 和 Mac 上)中运行良好和PC),但在iPad上,只显示第一个图表,后面的图表将不可见,我不知道为什么。恢复到 jQuery 方式:

 toMove.animate({ marginLeft: pixelsToMoveBy + "px" }, 500);

..将会正常工作。如果我执行以下操作

toMove.find('iframe').contents().find('body').css('background-color', 'red');

,甚至

toMove.find('iframe').contents().find('#chartarea').css('background-color', 'green');

然后我可以明显看到 iFrame 和图表确实存在,但 SVG 元素似乎没有渲染。

谁能向我解释为什么我看不到其他图表?

更新3

我制作了一个简单的 html 文件来说明问题。它使用 iScroll,有效地使用 webkit 转换:

http://reactiondynamics.com/lab/ipad.html

iPad 上只会显示第一个 iFrame。第二个被截断了,其余的都没有出现。然而,它在桌面上的所有其他浏览器中运行良好。

更新2: 基本上我试图得到与苹果滚动条相同的东西,但它在 iPad 上的操作方式是流畅的。

更新:

在搜索 Safari 文档时,我发现了下面的引用此处

注意:将溢出设置为隐藏的元素无法以 3D 方式渲染其子元素,并渲染为虽然变换样式设置为平面。

看起来无法完成,因为在“平面”模式下,图表不会出现。

my apologies in advance, this is my first SO question.

I have a simple slider that consists of several list items (li's), that each contain a Google Chart. Each Google Chart is essentially an iFrame with SVG elements inside that make up the chart. Each chart has a specific set size. The use of CSS3 transitions is because jQuery is slow as molasses on the iPad, especially the iPad 1:

<ul class = "slider">
   <li>{Google Chart 1}</li>
   <li>{Google Chart 2}</li>
   <li>{..and so on}</li>
</ul>

I have the following code for the iPad, bound to a link button for advancing the slider

var toMove = container.find('ul.slider');

//For purposes of this example I'm setting this to 300. In reality this is calculated by the index of the slider and the width of each chart

var pixelsToMoveBy = 300; 

toMove.css('-webkit-transition', '-webkit-transform 0.5s linear, margin-left 0.5s linear');
toMove.css('-webkit-transform', 'translate3d(' + pixelsToMoveBy + 'px, 0px, 0px)');

This works fine in desktop Chrome and Safari (Both Mac and PC), but on the iPad, only the first chart will display and the following charts will be invisible, and I have no idea why. Reverting back to the jQuery way:

 toMove.animate({ marginLeft: pixelsToMoveBy + "px" }, 500);

..will work fine. If I do the following

toMove.find('iframe').contents().find('body').css('background-color', 'red');

or even

toMove.find('iframe').contents().find('#chartarea').css('background-color', 'green');

Then I can visibly see that the iFrame and chart do exist, but the SVG elements don't seem to render.

Can anyone explain to me why I'm not seeing other charts?

UPDATE 3

I've made a simple html file that illustrates the problem. It uses iScroll, which effectively uses webkit transforms:

http://reactiondynamics.com/lab/ipad.html

Only the first iFrame will display on the iPad. The second one is truncated, and the rest do not appear. It works fine however, in all other browsers on desktop.

UPDATE 2:
Basically I'm trying to get the same thing as the Apple scroller but how it operates on the iPad, that is, smoothly.

UPDATE:

On scouring the Safari document, I found the quote below here

Note: Elements that have overflow set to hidden are unable to render their child elements in 3D, and are rendered as though the transform style were set to flat.

Looks like it cannot be done then, because in "flat" mode, the graphs don't appear.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文