【问题标题】:How to play/pause a JavaScript onClick event?如何播放/暂停 JavaScript onClick 事件?
【发布时间】:2015-02-17 11:01:48
【问题描述】:

由于我是 JavaScript 初学者,我想知道如何在 html 页面上播放和暂停 JavaScript。 在第一个 JavaScript 文件中,我有一个 onClick 显示/隐藏 div 元素标记的切换按钮,如下所示:

$(function () {        
    $(".toggleSidebar").click(function(event) {
    $(".sidebarToggle").hide();
    $(".toggleSidebar").removeClass("btn-info");
    $(this).addClass("btn-info");
    $("#"+$(this).attr("data-target")).fadeIn(500);
    localStorage.tab_sidebar =  $(this).attr("data-target")
    });
    if(localStorage.tab_sidebar != '')
    {
        $('.toggleSidebar[data-target="'+localStorage.tab_sidebar+'"]').click();
    }
});

    function toggleSidebar()
    {

    if ($("#my-section").hasClass('hide'))      
        $("#my-section").removeClass('hide');
    else
        $("#my-section").addClass('hide');

    }

div标签元素有this JavaScript为背景的动画:

var colors = new Array(
  [62,35,255],
  [60,255,60],
  [255,35,98],
  [45,175,230],
  [255,0,255],
  [255,128,0]);

var step = 0;
var colorIndices = [0,1,2,3];

//transition speed
var gradientSpeed = 0.0002;

function updateGradient()
{

  if ( $===undefined ) return;

var c0_0 = colors[colorIndices[0]];
var c0_1 = colors[colorIndices[1]];
var c1_0 = colors[colorIndices[2]];
var c1_1 = colors[colorIndices[3]];

var istep = 1 - step;
var r1 = Math.round(istep * c0_0[0] + step * c0_1[0]);
var g1 = Math.round(istep * c0_0[1] + step * c0_1[1]);
var b1 = Math.round(istep * c0_0[2] + step * c0_1[2]);
var color1 = "rgb("+r1+","+g1+","+b1+")";

var r2 = Math.round(istep * c1_0[0] + step * c1_1[0]);
var g2 = Math.round(istep * c1_0[1] + step * c1_1[1]);
var b2 = Math.round(istep * c1_0[2] + step * c1_1[2]);
var color2 = "rgba("+r2+","+g2+","+b2+")";

 $('#my-section').css({
   background: "-webkit-gradient(linear, left top, right top, from("+color1+"), to("+color2+"))"}).css({
    background: "-moz-linear-gradient(left, "+color1+" 0%, "+color2+" 100%)"});

  step += gradientSpeed;
  if ( step >= 1 )
  {
    step %= 1;
    colorIndices[0] = colorIndices[1];
    colorIndices[2] = colorIndices[3];

    //pick two new target color indices
    //do not pick the same as the current one
    colorIndices[1] = ( colorIndices[1] + Math.floor( 1 + Math.random() * (colors.length - 1))) % colors.length;
    colorIndices[3] = ( colorIndices[3] + Math.floor( 1 + Math.random() * (colors.length - 1))) % colors.length;

  }
}

setInterval(updateGradient,10);

问题在于,当该行被隐藏时,此 JavaScript 也会持续运行,从而浪费 PC 资源。 那么,每次按下切换按钮时,如何让这个 JavaScript 继续播放(显示行时)并暂停(隐藏行时)?

【问题讨论】:

  • 看看:stackoverflow.com/questions/109086/… 可能是您要找的。 (行隐藏时清除Interval,行显示时再次setInterval。)
  • @caCtus 感谢 Cactus,我试过这样:var refreshIntervalId = setInterval(updateGradient, 10); function toggleSidebar() { if( $("#my-section").hasClass('hide')) $("#my-section").removeClass('hide'); else $("#my-section").addClass('hide'); clearInterval(refreshIntervalId); } 但它不起作用。因为我是初学者,可能是因为我错过了一些东西
  • 我发布了一个答案。如果它仍然不起作用,请在此处发表评论并解释“不起作用”的确切含义。 :)
  • @caCtus 谢谢,但切换按钮和渐变脚本位于不同的文件中...我尝试了您的解决方案,但它不起作用

标签: javascript php html twitter-bootstrap codeigniter


【解决方案1】:
var colors = ...;
// All variable declarations for animated background

function updateGradient() {
    // Update gradient function (unchanged)
}


var refreshIntervalId;
// Or var refreshIntervalId = setInterval(updateGradient, 10);
// If you want the updateGradient function to run by default when the page is open.

function toggleSidebar() {
    if($("#my-section").hasClass('hide')) {
    // Show sidebar
        $("#my-section").removeClass('hide');

        // Loops updateGradient function
        refreshIntervalId = setInterval(updateGradient, 10);
    } else {
    // Hide sidebar
        $("#my-section").addClass('hide');

        // Stops updateGradient function
        clearInterval(refreshIntervalId);
    }
}

【讨论】:

  • 我的渐变 JS 以 setInterval(updateGradient,10); 结尾,我在我的主 JS(切换按钮所在的位置)上尝试了这个:var refreshIntervalId; function toggleSidebar() { if( $("#my-section").hasClass('hide')) $("#my-section").removeClass('hide'); // Loops updateGradient function refreshIntervalId = setInterval(updateGradient, 10); else $("#my-section").addClass('hide'); // Stops updateGradient function clearInterval(refreshIntervalId); } 但它不起作用
  • 当我按下按钮时,JavaScript 将属性提供给带有$('#my-section').css({ 的 div。会不会是问题?
  • 你能在你的渐变JS文件中删除/评论setInterval(updateGradient,10);吗?
  • 它不起作用,当我按下按钮时,我得到了同样的错误:toggleSidebar is not defined...这是它的代码$(".toggleSidebar").click(function(event) { $(".sidebarToggle").hide(); $(".toggleSidebar").removeClass("btn-info"); $(this).addClass("btn-info"); $("#"+$(this).attr("data-target")).fadeIn(500); localStorage.tab_sidebar = $(this).attr("data-target") }); if(localStorage.tab_sidebar != '') { $('.toggleSidebar[data-target="'+localStorage.tab_sidebar +'"]').click(); }
  • 您可以编辑您的问题并放入整个代码吗? (指出它何时是不同的文件。)您谈论“与以前一样的错误”,但您之前从未提及过此错误……也从未提及过此代码。我猜不出你不说什么。 ;) 我很确定我们离我们不远,我只是错过了一个细节。
猜你喜欢
  • 2017-07-10
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
相关资源
最近更新 更多