2014-09-25 32 views
0

我需要一些幫助完成我的小代碼「體驗」。每次在我的網站上發佈通知時,我都會嘗試創建瀏覽器選項卡通知。幾乎所有的代碼都能正常工作,但有一件事我無法工作。如何通過點擊功能在間隔中停止jquery函數?

if (stop) return;在代碼中間不起作用,但我想在用戶關閉通知時將標籤標題文本更改回current_title

我不是很熟悉編碼,很高興能夠感謝所有幫助!

var stop = false; 
var current_title = $(document).attr('title'); 
var titles = [ 
    ">>> Neue Meldung <<<", 
    ">> Neue Meldung <<<<", 
    "> Neue Meldung <<<<<", 
    ">> Neue Meldung <<<<", 
    ">>> Neue Meldung <<<", 
    ">>>> Neue Meldung <<", 
    ">>>>> Neue Meldung <", 
    ">>>> Neue Meldung <<"]; 

function titleCircle(i) { 
    if (stop) return; 
    i = (!i) ? 0 : (i * 1 + 1) % titles.length; 
    $('title').html(titles[i]); 
    setTimeout(titleCircle, 1000, [i]); 
}; 

$('div.notice-item-close').click(function() { 
    stop = true; 
    document.title = current_title; 
}); 

$('.notice-item').each(function() { 
    if ($(this).css("display") != "none" || $(this).css("visibility") != "hidden") { 
     $(document).load(titleCircle()); 
    } 
}); 

var notti_get_notice = function() { 

    $.ajax({ 
     type: "POST", 
     data: { 
      action: 'notti-inotify', 
      token: notti_Notice.token 
     }, 
     dataType: "JSON", 
     url: notti_Notice.ajaxurl, 
     // On Successful Communication 
     success: function (data) { 

      if (data !== null && data !== undefined) { 

       console.log(data); 
       jQuery(document).ready(function ($) { 

        var current_title = $(document).attr('title'); 
        var stop = false; 

        $('div.notice-item-close').click(function() { 
         stop = true; 
         document.title = current_title; 
        }); 

        var titles = [ 
         ">>> Neue Meldung <<<", 
         ">> Neue Meldung <<<<", 
         "> Neue Meldung <<<<<", 
         ">> Neue Meldung <<<<", 
         ">>> Neue Meldung <<<", 
         ">>>> Neue Meldung <<", 
         ">>>>> Neue Meldung <", 
         ">>>> Neue Meldung <<"]; 

        function titleCircle(i) { 
         if (stop) return; 
         i = (!i) ? 0 : (i * 1 + 1) % titles.length; 
         $('title').html(titles[i]); 
         var timer = setTimeout(titleCircle, 1000, [i]); 
        }; 
        $(document).load(titleCircle()); 
       }); 


       $.each(data, function (index, value) { 
        if (value.stay === 'false') jQuery.noticeAdd({ 
         text: value.text, 
         stay: false, 
         type: value.type 
        }); 
        else jQuery.noticeAdd({ 
         text: value.text, 
         stay: true, 
         type: value.type 
        }); 
       }); 
      } 
     } 
    }); 
}; 

window.setInterval(function() { 
    console.log('Fire'); 
    notti_get_notice(); 
}, notti_Notice.frequency); 
+0

你只是想停止的setInterval? – OxyDesign 2014-09-26 00:13:52

+0

我想通過點擊div.notice-item-close來立即停止函數titleCircle,並用之前保存的「current_title」替換瀏覽器選項卡中的無限循環。 – user45836 2014-09-26 00:17:05

+0

也許,不是'titleCircle'內部的'setTimeout',你可以在外部使用'setInterval',將它分配給一個變量,然後在點擊時用'clearInterval'停止'setInterval'。 [MDN上的window.clearInterval](https://developer.mozilla.org/fr/docs/DOM/window.clearInterval) – OxyDesign 2014-09-26 00:37:42

回答

0

您需要爲變量分配超時值。

var myTitleCircle= window.setTimeout(function()); 

然後使用clearTimeout

window.clearTimeout(myTitleCircle); 
+0

在哪裏準確地添加這個? – user45836 2014-09-26 00:59:35

+0

事情是我需要使用var notti_get_notice = function()之外的cleartimeout,但是對這個函數有影響,我該如何實現? – user45836 2014-09-26 07:16:55

0

的setInterval可能是一個更好的解決方案

http://jsfiddle.net/OxyDesign/mhof262o/

JS

$(document).ready(function(){ 
    var newInterval = window.setInterval(log,1000), 
     i = 0; 

    function log(){ 
     console.log('Interval n° '+i); 
     i++; 
    } 

    $('.clear').on('click', function(){ 
     clearInterval(newInterval); 
    }); 
}); 
+0

我如何正確地將其整合到我現有的代碼中?讓我知道,我會嘗試它(如果它有效,我會接受你的回答(: – user45836 2014-09-26 01:10:46

+0

)很難說,因爲你的代碼中有很多重複項(幾乎所有現在是2次),我真的不明白它的意思,notti_Notice沒有定義,所以我不能使用它。 – OxyDesign 2014-09-26 01:24:29