2014-09-25 36 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