轮播 - 元素位置在 touchend 上发生视觉变化

发布于 2024-10-17 04:39:30 字数 655 浏览 3 评论 0原文

我正在尝试为移动游猎构建一个触摸/滑动轮播。到目前为止,一切都很好,但是当我尝试在元素滑动后设置元素的左侧位置时,我遇到了一个问题。 CSS 中的左侧位置设置正确,但显示不正确。

抱歉,如果这还不清楚,但是描述起来有点困难。

请在此处查看问题(请在您的 iOS 或 Android 设备上查看)。< /a>

要重现,

  • 触摸项目 3

  • 向左滑动,刚好使项目 1 离开屏幕(不要将手指从屏幕上移开。您应该看到项目 2、项目 3、项目 4、项目 5 和项目 6 中的一些项目。

  • 将手指从屏幕上移开(您​​将看到项目“跳跃”。项目 3 现在位于项目 2 所在的位置,项目 4 位于项目 2 所在的位置) 3 是,等等)

  • 现在,尝试再次向左滑动,项目 2 会再次“跳跃”。

基本上,我所做的就是根据滑动距离翻译项目。在触摸端,我将元素的位置设置为翻译后的位置。这就是它的突破点。

我所有的代码都在上面的网址中。

任何帮助将不胜感激。

谢谢!

I am trying to build a touch/swipe carousel for mobile safari. So far, so good, but I am running into an issue when I try to set the left position of the elements after they've been swiped. The left positions are being set correctly in CSS, but they are displayed incorrectly.

Sorry if this is not clear, but it's a bit difficult to describe.

Please see the problem here (please view on your iOS or Android device).

To reproduce,

  • Touch item 3

  • Swipe to the left, just enough so that Item 1 is off the screen (do not lift your finger off the screen. You should see Item 2, Item 3, Item 4, Item 5, and some of Item 6.

  • Lift your finger off the screen (you will see the items "jump". Item 3 is now where Item 2 was, Item 4 where Item 3 was, etc)

  • Now, try to swipe to the left again. You will the items "jump" again. Item 2 is back where it was supposed to be.

Basically, what I do is translate the items based on the swiped distance. On touch end, I set the positions of the elements to the translated positions. That's where it's breaking.

All my code is in the url above.

Any help would be greatly appreciated.

Thanks!

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

·深蓝 2024-10-24 04:39:30

知道了!

所以我的问题不是重置转换。我添加了这一行:

items[i].style.webkitTransform = "translate3d(0px, 0px, 0px)";

到我的 updatePosition 函数中,一切都很好!

  function updatePosition(){
    for(var i=0; i<items.length; i++){
      var translatedLeft = getTranslatedPosition(items[i]).left;
      items[i].style.left = translatedLeft + "px";
      items[i].style.webkitTransform = "translate3d(0px, 0px, 0px)";
    }
  }

工作演示在这里: http://dl.dropbox.com/u/10250170 /dev/carousel/touch_test.html(在 iPhone 模拟器或您的 iOS 或 Android 设备中查看)

Got it!

So my problem was not resetting the transform. I added this line:

items[i].style.webkitTransform = "translate3d(0px, 0px, 0px)";

to my updatePosition function and all is well!

  function updatePosition(){
    for(var i=0; i<items.length; i++){
      var translatedLeft = getTranslatedPosition(items[i]).left;
      items[i].style.left = translatedLeft + "px";
      items[i].style.webkitTransform = "translate3d(0px, 0px, 0px)";
    }
  }

working demo here: http://dl.dropbox.com/u/10250170/dev/carousel/touch_test.html (view in iPhone simulator or your iOS or Android device)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文