【问题标题】:Dynamic translate3d by adding a number per click通过每次点击添加一个数字来动态 translate3d
【发布时间】:2019-04-30 14:47:37
【问题描述】:

您好,我正在尝试模拟滑块中的箭头,我将元素向左和向右移动。

到目前为止,我的项目向右移动了一次。

https://i.gyazo.com/34a0ef4a5064c2942aca7c717a775e8b.mp4

这是我目前的代码

<script>
  (function(){
    const arrowLeft = document.querySelector('#video-tags-left');
    const arrowRight = document.querySelector('#video-tags-right');
    const tags = document.querySelector('.video-tags');
    const now = "740";

    arrowRight.addEventListener("click", function() {
      $(tags).css({
        "transform": "translate3d(" + -now + "px, 0px, 0px)",
        "transform-style": "preserve-3d"
       });
    });

    arrowLeft.addEventListener("click", function() {
      $(tags).css({
        "transform": "translate3d("+ +now+", 0px, 0px)",
        "transform-style": "preserve-3d"
       });
    });
}());
</script>

所以我尝试添加和删除now,点击时为 740,所以每次点击右时添加 740,点击左时删除,直到重置为 0px。

因此,当用户单击左箭头时,我再次单击 740 再次 1460 等,反之亦然。

【问题讨论】:

    标签: javascript jquery translate3d


    【解决方案1】:

    以下是您的代码存在的一些问题:

    1. 您将“now”声明为 const,因此它的值无法更改
    2. 您将“now”声明为字符串类型,因此您不能对其进行任何数学运算(例如递增或递减)

    将您的代码更改为:

    <script>
      (function(){
        const arrowLeft = document.querySelector('#video-tags-left');
        const arrowRight = document.querySelector('#video-tags-right');
        const tags = document.querySelector('.video-tags');
        let now = 740; // Declare "now" as variable of type number
    
        arrowRight.addEventListener("click", function() {
          now += 740; // Increment "now" by 740
          $(tags).css({
            "transform": "translate3d(" + now + "px, 0px, 0px)",
            "transform-style": "preserve-3d"
           });
        });
    
        arrowLeft.addEventListener("click", function() {
          now -= 740; // Decrement "now" by 740
          $(tags).css({
            "transform": "translate3d(" + now + "px, 0px, 0px)",
            "transform-style": "preserve-3d"
           });
        });
    }());
    </script>
    

    【讨论】:

    • 哦,好的,感谢您指出问题以及我做错了什么,这是一个很大的帮助。这有效,我必须单击两次才能启动代码,但是当我单击左箭头返回时,位置重置回 0 i.gyazo.com/a6b25485f2d1eab33419a297abf78790.mp4 理想情况下它应该返回 740 不重置
    • @B.J.B 你确定你正确地实现了我的代码吗?因为当我尝试它时它会起作用。这是一个有效的 Codepen - codepen.io/merkur0/pen/gyJXoX
    • 我的意思是该值从 740 开始单击右箭头控制台中的值并翻译上升,但是,当单击再次返回时,控制台编号会更改但值in translate 不是gyazo.com/2e866187ba3803cb70226c714994f989
    • 我刚刚注意到您的代码中有一个错字(因此在我发布的代码中也是如此)。这个:"transform": "translate3d(" + now + ", 0px, 0px)", 应该是:"transform": "translate3d(" + now + "px, 0px, 0px)", 我更新了我的代码。
    • 哦哈哈,那是我的错。还有一件事,是否可以将状态限制为 0,这样我就不能再往回走,从而进入减号?
    【解决方案2】:

    每次单击其中一个箭头时,您应该增加/减少now 的值:

    <script>
        (function(){
            const arrowLeft = document.querySelector('#video-tags-left');
            const arrowRight = document.querySelector('#video-tags-right');
            const tags = document.querySelector('.video-tags');
            const SLIDER_WIDTH = 740;
            let now = 0;
    
            arrowRight.addEventListener("click", function() {
                now -= SLIDER_WIDTH;
                $(tags).css({
                    "transform": "translate3d(" + now + "px, 0px, 0px)",
                    "transform-style": "preserve-3d"
                });
            });
    
            arrowLeft.addEventListener("click", function() {
                now += SLIDER_WIDTH;
                $(tags).css({
                    "transform": "translate3d("+ now + "px, 0px, 0px)",
                    "transform-style": "preserve-3d"
                });
            });
        }());
    </script>
    

    考虑到您还必须检查滑块的限制,以免将滑块移动到没有内容的部分。

    【讨论】:

    • 我将如何检查限制?
    • 嗯,左边的界限似乎是初始位置(当now等于0时)。正确的限制将取决于您拥有的总项目数以及您在幻灯片中显示的项目。
    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多