如何在单击一个div时阻止函数,以及如何在单击另一个div后重新激活



当点击div#onblock-红色方块-时,我需要阻止滚动函数的类"position",而不是"position2"或"position3"工作的函数,当点击div#activate-蓝色方块-时重新激活它

$(window).scroll(function(event) {
  var scroll = $(window).scrollTop();
  if (scroll > 0 && scroll < 1000) {
    $('.position').css({
      'color': 'red))',
      'background': 'rgba(0,40,90,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(255,248,0,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(255,0,215,1.00)',
    })
  }
  if (scroll > 1000 && scroll < 2000) {
    $('.position').css({
      'color': 'green',
      'background': 'rgba(255,0,144,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(0,100,206,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(0,255,7,1.00)',
    })
  }
  if (scroll > 2000 && scroll < 3000) {
    $('.position').css({
      'color': 'yellow',
      'background': 'rgba(255,0,226,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(155,0,255,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(224,224,224,1.00)',
    })
  }
  if (scroll > 3000 && scroll < 4000) {
    $('.position').css({
      'color': 'orange',
      'background': 'rgba(255,2,6,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(69,66,179,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(124,141,245,1.0)',
    })
  }
  if (scroll > 4000 && scroll < 5000) {
    $('.position').css({
      'color': 'rgba(0,94,255,1.00)',
      'background': 'rgba(255,0,226,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(224,224,224,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(155,0,255,1.00)',
    })
  }
  if (scroll > 5000 && scroll < 6000) {
    $('.position').css({
      'color': 'cyan',
      'background': 'rgba(255,238,0,1.00)',
      'text-shadow': 'none'
    })
    $('.position2').css({
      'color': 'rgba(176,50,0,1.0)',
    })
    $('.position3').css({
      'color': 'rgba(100,16,5,1.00)',
    })
  }
  if (scroll > 5000 && scroll < 6000) {
    $('.position').css({
      'color': 'blue',
      'background': 'rgba(243,255,217,1.00)',
    })
    $('.position2').css({
      'color': 'rgba(136,168,191,1.0)',
    })
    $('.position3').css({
      'color': 'rgba(68,47,168,1.0)',
    })
  }
  var color = $('.position').css('color');
  $('#p1color').html(color);
  var color = $('.position2').css('color');
  $('#p2color').html(color);
  var color = $('.position3').css('color');
  $('#p3color').html(color);
});
body {
  margin: 0;
  padding: 0;
  height: 5000px;
}
#onblock {
  float: right;
  width: 100px;
  height: 100px;
  background: red;
  position: fixed;
  margin-left: 50%;
}
#reactivate {
  float: right;
  width: 100px;
  height: 100px;
  background: blue;
  margin-top: 100px;
  margin-left: 50%;
  position: fixed;
}
.position {
  position: fixed;
  color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="position">
  A
</div>
<div id="onblock">
</div>
<div id="reactivate">
</div>

解决OP的具体问题。以下是如何做到这一点。有关更多解释,请参阅其他答案

var block = false;
$('#onblock').on('click', function() {
  block = true;
})
$('#reactivate').on('click', function() {
  block = false;
})
$(window).scroll(function(event) {
  if(block) return;
  var scroll = $(window).scrollTop();
  if (scroll > 0 && scroll < 1000) {
    $('.position').css({
      'color': 'red))',
      'background': 'rgba(0,40,90,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(255,248,0,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(255,0,215,1.00)',
    })
  }
  if (scroll > 1000 && scroll < 2000) {
    $('.position').css({
      'color': 'green',
      'background': 'rgba(255,0,144,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(0,100,206,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(0,255,7,1.00)',
    })
  }
  if (scroll > 2000 && scroll < 3000) {
    $('.position').css({
      'color': 'yellow',
      'background': 'rgba(255,0,226,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(155,0,255,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(224,224,224,1.00)',
    })
  }
  if (scroll > 3000 && scroll < 4000) {
    $('.position').css({
      'color': 'orange',
      'background': 'rgba(255,2,6,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(69,66,179,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(124,141,245,1.0)',
    })
  }
  if (scroll > 4000 && scroll < 5000) {
    $('.position').css({
      'color': 'rgba(0,94,255,1.00)',
      'background': 'rgba(255,0,226,1.00)'
    })
    $('.position2').css({
      'color': 'rgba(224,224,224,1.00)',
    })
    $('.position3').css({
      'color': 'rgba(155,0,255,1.00)',
    })
  }
  if (scroll > 5000 && scroll < 6000) {
    $('.position').css({
      'color': 'cyan',
      'background': 'rgba(255,238,0,1.00)',
      'text-shadow': 'none'
    })
    $('.position2').css({
      'color': 'rgba(176,50,0,1.0)',
    })
    $('.position3').css({
      'color': 'rgba(100,16,5,1.00)',
    })
  }
  if (scroll > 5000 && scroll < 6000) {
    $('.position').css({
      'color': 'blue',
      'background': 'rgba(243,255,217,1.00)',
    })
    $('.position2').css({
      'color': 'rgba(136,168,191,1.0)',
    })
    $('.position3').css({
      'color': 'rgba(68,47,168,1.0)',
    })
  }
  var color = $('.position').css('color');
  $('#p1color').html(color);
  var color = $('.position2').css('color');
  $('#p2color').html(color);
  var color = $('.position3').css('color');
  $('#p3color').html(color);
});
body {
  margin: 0;
  padding: 0;
  height: 5000px;
}
#onblock {
  float: right;
  width: 100px;
  height: 100px;
  background: red;
  position: fixed;
  margin-left: 50%;
}
#reactivate {
  float: right;
  width: 100px;
  height: 100px;
  background: blue;
  margin-top: 100px;
  margin-left: 50%;
  position: fixed;
}
.position {
  position: fixed;
  background: green;
  width: 100px;
  height: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
  <div class="position">
    A
  </div>
  <div id="onblock">
    Block it!
  </div>
  <div id="reactivate">
    Reactivate!
  </div>
</body>

尽管我看不到您的问题和代码之间的上下文。我将给你举一个例子,说明如何通过编辑函数本身或不在条件下运行函数本身来阻止函数做它所做的事情。

逻辑用注释来解释。。。

var enable = true;
var enable2 = true;
$('#enable').on('click', function() {
  if (!enable) {
    enable = true;
    animateIt(); // call again after enabled...
  }
})
$('#disable').on('click', function() {
  enable = false;
})
// in this case you have access to the function...
function animateIt() {
  if (!enable) return; // return from the function if not enabled...
  $('#animateThis').css('margin-left', '0px');
  $('#animateThis').animate({
    'marginLeft': '70%'
  }, 2000, animateIt);
}
animateIt(); // call the function for the first time...


// now let's say you dont have access to this function... or don't want to edit it...
var backup = animateIt2; // create a backup of the function...
$('#disable2').on('click', function() { // on click 'disable' change the function itself...
    animateIt2 = function() {
      return false;
    }
})
$('#enable2').on('click', function() {
  // on enable change the function back to it's old defination...
  if (backup) {
    animateIt2 = backup; //
    animateIt2()
  } else {
    animateIt2()
  }
})
function animateIt2() {
  $('#animateThis2').css('margin-left', '0px');
  $('#animateThis2').animate({
    'marginLeft': '70%'
  }, 2000, animateIt2);
}
animateIt2();
.btn {
  width: 150px;
  height: 50px;
  line-height: 50px;
  text-align: center;
  background: Blue;
  color: #FFF;
  float: left;
  margin-right: 20px;
}
.clearIt {
  clear: both;
}
#animateThis,
#animateThis2 {
  width: 100px;
  height: 100px;
  margin: 50px 0px;
  background: Red;
  float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="enable" class="btn">Enable</div>
<div id="disable" class="btn">Disable</div>
<div class="clearIt"></div>
<div id="animateThis"></div>
<div class="clearIt"></div>
<div id="enable2" class="btn">Enable</div>
<div id="disable2" class="btn">Disable</div>
<div class="clearIt"></div>
<div id="animateThis2"></div>

最新更新