繁体   English   中英

到达某个位置时如何激活间隔?

[英]How to activate an interval when a certain position is reached?

问题是它同时调用了var intervalLeftintervaRight 当它向右移动时,我希望intervalLeft不起作用,反之亦然。 当到达startPosition 100时,它将激活intervalLeft ;当到达startPosition 0时,它将激活intervalRight infinite。

<div id="moveAnimation" class="block"></div>
</div>
<script>
  var elem = document.getElementById("moveAnimation");
  elem.addEventListener("click", movingImage);

  function movingImage() {
    var startPosition = 0;
    var intervalRight = setInterval(frameRight, 10);
    var intervalLeft = setInterval(frameLeft, 10);

    function frameRight() {
      if (startPosition >= 100) {
        clearInterval(intervalRight);
        frameLeft();
      } else {
        startPosition += 0.5;
        document.getElementById("moveAnimation").style.left = startPosition + "%";
      }
    }

    function frameLeft() {
      if (startPosition <= 0) {
        clearInterval(intervalRight);
        frameRight();
      } else {
        startPosition -= 2;
        document.getElementById("moveAnimation").style.right = startPosition + "%";
      }
    }
  }
</script>

这是练习:

在此下方,您需要使用JS进行运动的div左右移动。 使它在2秒内到达终点,然后在5秒钟内返回。 重复一遍。

更新了您的代码。 在下面使用

<div id="moveAnimation" class="block"></div>
    </div>
    <script>
    var elem = document.getElementById("moveAnimation");
        elem.addEventListener("click", movingImage);



        function movingImage() {
            var startPosition = 0;
            var intervalRight = setInterval(frameRight, 10);
            var rightTimer = true;
            var leftTimer = false;
            var intervalLeft;

            function frameRight() {
                if(!rightTimer){
                    rightTimer = true;
                    intervalRight = setInterval(frameRight,10)
                    return;
                }
                if (startPosition >= 100) {
                    rightTimer = false;
                    clearInterval(intervalRight);
                    frameLeft();

                } else {

                    startPosition += 0.5;
                    document.getElementById("moveAnimation").style.left        =     startPosition + "%";
                }

            }

            function frameLeft() {
                if(!leftTimer){
                    leftTimer = true;
                    intervalLeft = setInterval(frameLeft,10)
                    return;
                }
                if (startPosition <= 0) {
                    leftTimer = false;
                    clearInterval(intervalLeft);
                    frameRight();

                } else {

                    startPosition -= 2;
                      document.getElementById("moveAnimation").style.left = startPosition + "%";
                }
            }
        }
    </script>

经过更多测试之后,我发现用更少的代码行就能找到答案。

var elem = document.getElementById("moveAnimation");
            elem.addEventListener("click", movingImage);

            function movingImage() {
                var startPosition = 0;
                var intervalRight = setInterval(frameRight, 10); //1 





                function frameRight() {
                    if (startPosition >= 100) {
                        clearInterval(intervalRight);
                        intervalLeft = setInterval(frameLeft, 10);


                    } else {
                        startPosition += 0.5;
                        document.getElementById("moveAnimation").style.left =    startPosition + "%";
                    }

                }

                function frameLeft() {
                    if (startPosition <= 0) {
                        clearInterval(intervalLeft);
                        intervalRight = setInterval(frameRight, 10);

                    } else {
                        startPosition -= 0.2;
                        document.getElementById("moveAnimation").style.left = startPosition + "%";
                    }
                }
            }
        </script>

这应该如何工作。 在我发布的原始代码中,clearInterval未链接到实际的intervalID

JavaScript计数器,一定时数到3<div> 到达了</div><div id="text_translate"><p>我很难解决这个问题。 所以我得到了计数器,我想在用户向下滚动页面并达到某个 class 后从 0 慢慢计数到 3,在我的例子中是“.domov2”</p><p> 如果我删除 API (EventListener),那么计数器工作得很好,但它已经在站点加载后立即开始计数。</p><p> 我设法做到了,但是当我向下滚动时不是执行 1 次,function 在到达 div 后执行了很多次滚动(我对 API 真的很糟糕)。 如何限制 function 执行 1 次并使其仅在条件下运行。</p><p> HTML:</p><pre class="lang-html prettyprint-override"> <section class="domov2"> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. </section> <div id="counter" data-target="3"> -1 </div></pre><p> JavaScript</p><pre> $(window).bind('scroll', function() { if($(window).scrollTop() >= $('.domov2').offset().top + $('.domov2').outerHeight() - window.innerHeight) { // create function startCount() const startCount = function() { // get number value from data-target and current number const target = +counter.getAttribute('data-target'); const count = +counter.innerText; // if count<target if (count < target) { // add to current value +1 var sestevek = count + 1 // replace current value in html with recently updated value "sestevek" counter.innerText = sestevek; // slow down condition for 0.3s setTimeout(startCount, 300); } else { //if current value is = target, then keep target counter.innerText = target; }}; //execute function startCount(); } });</pre></div>

[英]JavaScript counter, count to 3 when certain <div> is reached

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 到达特定位置时如何停止触摸事件? ReactJS 改变滚动元素的颜色,当达到某个 position 单击某个按钮时如何激活 animation? SetInterval - 达到下一分钟时的更改间隔 到达底部页脚时如何停止粘边栏的固定位置 到达特定部分的底部时如何将位置静态更改为固定 达到特定div时播放超级声音 JavaScript计数器,一定时数到3<div> 到达了</div><div id="text_translate"><p>我很难解决这个问题。 所以我得到了计数器,我想在用户向下滚动页面并达到某个 class 后从 0 慢慢计数到 3,在我的例子中是“.domov2”</p><p> 如果我删除 API (EventListener),那么计数器工作得很好,但它已经在站点加载后立即开始计数。</p><p> 我设法做到了,但是当我向下滚动时不是执行 1 次,function 在到达 div 后执行了很多次滚动(我对 API 真的很糟糕)。 如何限制 function 执行 1 次并使其仅在条件下运行。</p><p> HTML:</p><pre class="lang-html prettyprint-override"> <section class="domov2"> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. </section> <div id="counter" data-target="3"> -1 </div></pre><p> JavaScript</p><pre> $(window).bind('scroll', function() { if($(window).scrollTop() >= $('.domov2').offset().top + $('.domov2').outerHeight() - window.innerHeight) { // create function startCount() const startCount = function() { // get number value from data-target and current number const target = +counter.getAttribute('data-target'); const count = +counter.innerText; // if count<target if (count < target) { // add to current value +1 var sestevek = count + 1 // replace current value in html with recently updated value "sestevek" counter.innerText = sestevek; // slow down condition for 0.3s setTimeout(startCount, 300); } else { //if current value is = target, then keep target counter.innerText = target; }}; //execute function startCount(); } });</pre></div> 达到特定大小的内容时为空白页 达到某个字符时停止匹配
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM