18

これが私が達成しようとしていることです。最後のスライドに到達すると、fadeOutの最後のスライド、次にfadeInの最初のスライド、次にclearInterval (すべてがこの部分で機能します)。今私の問題は、それが存在しない場合は再度setIntervalを設定したいのですが、それを実現する方法がわかりません:(
ifステートメントでこれを解決しようとしましたが、スクリプトがまったく機能しません
!どうすれば間隔を再開できますか?ありがとうございます!!このようなifステートメントが
なくても、正常に機能しています。

if(!intervalID){
    intervalID = setInterval(animate,5000);
}    

これは私がこれまでに持っているものです:

$(document).ready(function() {
  /*check if intervalID don't exists messes UP!!*/
  if (!intervalID) {
    intervalID = setInterval(animate, 5000);
  }

  //Hide everything except first slide and controls

  $('.slidewrap div:not(.slidewrap div:first,.slidewrap .slide_controls)').hide();

  var animate = function() {

    /*if .pagination_active is last removeClass and addClass to .pagination_active 
             first li tag*/

    if ($('.pagination_active').is($('.slide_controls ul li:last'))) {
      $('.pagination_active').removeClass('pagination_active');
      $('.slide_controls ul li:first').addClass('pagination_active');
    } else {
      $('.pagination_active').removeClass('pagination_active').next().addClass('pagination_active');
    }

    /*if div.active is last fadeOut and add .active class 
             to the first div and fadeIn FIRST div then CLEAR INTERVAL and set intervalID to zero */

    if ($('.active').is($('.slidewrap div:last'))) {
      $('.active').fadeOut(1000).removeClass('active');
      $('.slidewrap div:first').addClass('active').fadeIn(1000, function() {
        clearInterval(intervalID);
        intervalID = 0;

      });
    }

    //OR .active fadeOut and next div fadeIn
    else {
      $('.active').fadeOut(1000).next().fadeIn(1000, function() {
        $('.slidewrap div.active').removeClass('active').next('div').addClass('active');

      });
    }

  }

  var intervalID;
  intervalID = setInterval(animate, 3000);

});
4

5 に答える 5

26

間隔をクリアした後、。で再開する必要がありますsetInterval()

あなたのために機能を作る方が良いでしょうsetInterval()

var intervalID = null;

function intervalManager(flag, animate, time) {
   if(flag)
     intervalID =  setInterval(animate, time);
   else
     clearInterval(intervalID);
}

これflagが値を持つboolean変数ですtrue/ falsetrue実行され、実行さsetInterval()falseますclearInterval();

これで、必要に応じて上記の機能を使用できます。

例えば:

intervalManager(true, animate, 300);  // for setInterval

intervalManager(false);  // for clearInterval
于 2012-06-07T15:35:33.627 に答える
4

単なる例

var myVar 
function myTimer() {
    var d = new Date();
    var t = d.toLocaleTimeString();
    document.getElementById("demo").innerHTML = t;
}

function myStopFunction() {
    clearInterval(myVar);
}
function myStartFunction() {
    myVar = setInterval(myTimer, 1000);
}
myStartFunction();
<p id="demo"></p>
<button onclick="myStopFunction()">Stop time</button>
<button onclick="myStartFunction()">Start time</button>

于 2018-07-15T13:27:56.107 に答える
3

これは、間隔を開始および停止するために使用できるコールバックと間隔を取得するユーティリティオブジェクトです。

   //simple utility object to start and stop an interval       
    var IntervalUtil = function(functionCall, interval){


        var intervalObj = 0,
            INTERVAL    = interval;

        var callback = functionCall;

        function startTimer(){
            console.log('start timer', intervalObj)
            if(intervalObj === 0){
                intervalObj = setInterval(callback, INTERVAL)
            }
        }   

        function stopTimer(){
            clearInterval(intervalObj);
            intervalObj = 0;
            console.log('timer stopped', intervalObj);
        }

        return {
            startTimer : startTimer,
            stopTimer  : stopTimer
        }

    };  

*あなたはそれをそのように使うでしょう*

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta name="author" content=""/>

    <title>Timer : setInterval()</title> 


    <style type="text/css">


    html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    b, u, i, center,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td,
    article, aside, canvas, details, embed, 
    figure, figcaption, footer, header, hgroup, 
    menu, nav, output, ruby, section, summary,
    time, mark, audio, video {
        margin: 0;
        padding: 0;
        border: 0;
        font-size: 100%;
        color:#000;
        line-height:1.3em;
        font: inherit;
        vertical-align: middle;
        font-family:arial;
        font-size:12px;
        outline:none;
    }

    a{
        outline:none;
        text-decoration:none;
        color:#145486;
    }
    a span{
        color:#145486;
    }

    h1{
        font-weight:normal;
        font-size:32px;
    }

    body{
        background:#efefef;
        text-align:center;
    }
    .content{
        width:400px;
        padding:20px;
        margin:10px auto;
        background:#fff;
        border:solid 1px #ebebeb;
        text-align:left;
    }

    #toggleTimer{
        color:#fff;
        font-size:10px;
        padding:2px 7px;
        display:inline-block;
        background:#357cb7;
        border:solid 1px #0c8af4;
    }

    #toggleTimer.running{
        background:#f14621;
        border:solid 1px #ff4c00;
    }

    #output{
        padding:7px;
        font-size:10px;
        border:dashed 1px #ebebeb;
        background:#f8f8f8;
        margin-left:10px;
        display:inline-block;
    }
    em{
        font-weight:bold;
    }

    </style>

</head>
<body>


<div class="content">

    <h1>Set Interval Code</h1>

    <a href="javascript:" id="toggleTimer" class="">Start Timer</a>

    <span id="output"></span>

    <br class="clear"/>

</div>


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>


<script type="text/javascript">

    $(document).ready(function(){
        var demo = new Demo();
    });


    var Demo = function(){

        var self = this;

        var START_TEXT = "Start Timer",
            STOP_TEXT  = "Stop Timer";

        var $toggle = $('#toggleTimer'),
            $output = $('#output');

        var count = 0;

        var intervalUtil;

        function init(){
            intervalUtil = new IntervalUtil(printMessage, 1000);
            setClickHandler();
            return self;
        }   

        function setClickHandler(){
            $toggle.click(toggleTimer)
        }

        function toggleTimer(){

            $toggle.toggleClass('running');

            if($toggle.hasClass('running')){
                $toggle.text(STOP_TEXT);
                intervalUtil.startTimer();
            }else{
                $toggle.text(START_TEXT);
                intervalUtil.stopTimer();
            }
        }

        function printMessage(){        
            $output.html("printMessage called <em>" + (count++) + "</em> times");
        }

        return init();

    }


    //simple utility object to start and stop an interval       
    var IntervalUtil = function(functionCall, interval){


        var intervalObj = 0,
            INTERVAL    = interval;

        var callback = functionCall;

        function startTimer(){
            console.log('start timer', intervalObj)
            if(intervalObj === 0){
                intervalObj = setInterval(callback, INTERVAL)
            }
        }   

        function stopTimer(){
            clearInterval(intervalObj);
            intervalObj = 0;
            console.log('timer stopped', intervalObj);
        }

        return {
            startTimer : startTimer,
            stopTimer  : stopTimer
        }

    };  

</script>


</body>
</html>
于 2012-06-07T16:30:35.060 に答える
1

15秒をカウントするタイマーの解決策は、メインページに移動します。画面をクリックすると、タイマーが開始にリセットされます。それは誰かに役立つかもしれません。(xはタッチイベントのカウンターです):

  var productInterval = null;
  var counterForGoToMainPage = 15;

  function startTimer(){
    counterForGoToMainPage--;

    if(counterForGoToMainPage == 0){
      clearInterval(productInterval);
      counterForGoToMainPage = 15;
      window.location.href = "/";
      }
  }

  function countTouches(event) {
  var x = event.touches.length;

    if(x == 1) { 
      clearInterval(productInterval);
      counterForGoToMainPage = 15;
      productInterval = setInterval(function(){
         startTimer();
      },1000);
    }
  }
于 2020-08-17T14:17:52.450 に答える
0

私のプロジェクト(を使用)では、関数間をループして、関数内でNodeJSタイマーを定義Sveltekitできることを学びました。setIntervalclearIntervallet

$: number = 0 //The "$" sign, in this case, is used to a make reactive statement 

const changeValue = (e: any) => {
    let changingValue = setInterval(() => {
        number += 0.01
        if (number >= 0.2) {
            clearInterval(changingValue)
        }
    }, 4)
}, 
changeValueAgain = (e: any) => {
    let changingValue = setInterval(() => {
        number -= 0.01
        if (number <= 0) {
            clearInterval(changingValue)
        }
    }, 4)
}

(ちなみに私はTypescriptを使用していました)それは簡単です。関数を呼び出すたびに、ある条件が真になるとクリアされる新しいNodeJSタイマーが作成されます。

このeパラメーターは、イベントハンドラーに使用されました...

于 2022-02-27T02:44:27.977 に答える