Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   отмена повторного выполнения события (https://javascript.ru/forum/events/32144-otmena-povtornogo-vypolneniya-sobytiya.html)

frant32 04.10.2012 20:35

отмена повторного выполнения события
 
допустим есть событие onscroll

нужно чтобы при первом вызове этого события что-либо выполнялось (примером alert('it work');) , но при повторном вызове этого события onscroll уже не работало и выполняло alert('it broke').

cyber 04.10.2012 21:01

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <a href="#">click me </a>
    
    <script>

var elem = document.body.children[0];
      
      elem.onclick = onElementClick;
      
    var first_call = false;
      
      function onElementClick () {
      
      
        if(!first_call){
        
          first();
          
         first_call = true;
          
          return;
        } 
      
      
      alert("second");
        
      return false;
      }
      
      
      
      function first() {
      
      alert("first");
      
      }
      
      
      


    </script>

  </body>
</html>

lord2kim 04.10.2012 21:04

frant32,
window.onscroll = function() { alert('it work'); window.onscroll = function () { alert('it broke'); }; }

cyber 04.10.2012 21:16

Цитата:

Сообщение от lord2kim (Сообщение 208214)
frant32,
window.onscroll = function() { alert('it work'); window.onscroll = function () { alert('it broke'); }; }

только такой вариант не будет работать если добавлять через addEventListener

frant32 04.10.2012 21:28

спасибо за оба варианта )

frant32 04.10.2012 21:37

а нельзя сдеалать какой-то счётчик?
чтобы допусти его обнулив после допустим 3го или 7го вызова (при коктрому выдаёт alert("second");) функция onElementClick работала по новому ?

cyber 04.10.2012 21:54

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <a href="#">click me </a>
    
    <script>

var elem = document.body.children[0];
      
      elem.onclick = onElementClick;
      
    var i = 0;
      
      function onElementClick () {
      
      
        if(i <= 3 ){
        
          first();
          
         i++;
          
          return;
        } 
      
      
      alert("все!");
        
      return false;
      }
      
      
      
      function first() {
      
      alert(i+1);
      
      }
      
      
      


    </script>

  </body>
</html>

frant32 05.10.2012 03:20

нет всё чёт не то не могу прикрутить к тому как надо, пойдём другим путём =)
<html>
<body>
<style>
body {height:1000px;}
</style>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script>
var doc = $(document);
doc.scroll(function(){
    if(doc.scrollTop() >= 1 ){
	alert('sss');
    }
});

</script>
</body>
</html>


воот , суть в том что мне нужно что-бы после первого срабатывания окошко вылазило лиш рас , тоесть после последующего скрола ничего не присходило..
а то получается так : я загрузил страницу --> проскролюю --> вылазит окошко -->незакрыв окошко дальше скорлю --> закрываю окошко --> и вылазит куча окошек....

или же прокрутив колесиком (быстро) полоборота вылазит куча этих окошек )))

вот как блин с этим боротся....

lord2kim 05.10.2012 08:35

frant32,
<html>
<body>
<style>
body {height:1000px;}
</style>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script>
var doc = $(document), i = 0;
doc.scroll(function(){
    if(i>0){ return; }
    if(doc.scrollTop() == 1){
    alert('sss'); i++;
    }
});
</script>
</body>
</html>

frant32 05.10.2012 14:18

<html>
<body>
<style>
body {height:1000px;}
div { width:100px; height:50px; background:#000; position:fixed;}
</style>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>

<div id = "id1"> dfdf </div>

<script>
var doc = $(document);
var i = 0;
doc.scroll(function(){
  
  if(i>0){ 
     return 
  }
  
  if(doc.scrollTop() != 0){
	 i++;
	 $('#id1').css('opacity','0.5');
  }
});


</script>
</body>
</html>


но при скроле до упора вверх прозрачность исчезает ...

frant32 05.10.2012 23:50

сделал это так

<html>
<body>
<style>
body {height:1000px;}
div { width:100px; height:50px; background:#000; position:fixed;}
</style>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>

<div id = "id1"> dfdf </div>

<script>
var doc = $(document);
var i = 0;
doc.scroll(function(){
  if(i>0){ 
     return 
  }
  
  if(doc.scrollTop() == 0){
	 i++;
	 $('#id1').css('opacity','1');
	 $('#id1').stop().animate({height:50},500);
  }else{
     i--;
     $('#id1').css('opacity','0.4');
     $('#id1').stop().animate({height:10},500);	 
  }
});


</script>

</body>
</html>


не знаю на сколько это правильно , но работает так как хочу)))

и кто мне обьяснить почему без stop(); анимация работает не правильно ?

Your 06.10.2012 07:22

<!DOCTYPE html>
<html>
<head>
	<style type="text/css">
		html, body{height:1000px;}
		.block{width:300px;height:300px;background:#000000;position:fixed;}
	</style>
	<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
	<script type="text/javascript">
		$(window).scroll(function(){
			var scrolls=$.browser.msie?document.body.scrollTop:$(this).scrollTop();
			if(0<scrolls) {
				$('.block').css('opacity','0.5');
			} else {
				$('.block').css('opacity','1');
			}
		});
	</script>
</head>
<body>
	<div class="block"></div>
</body>
</html>

frant32 06.10.2012 12:23

Цитата:

Сообщение от Your (Сообщение 208487)
<!DOCTYPE html>
<html>
<head>
	<style type="text/css">
		html, body{height:1000px;}
		.block{width:300px;height:300px;background:#000000;position:fixed;}
	</style>
	<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
	<script type="text/javascript">
		$(window).scroll(function(){
			var scrolls=$.browser.msie?document.body.scrollTop:$(this).scrollTop();
			if(0<scrolls) {
				$('.block').css('opacity','0.5');
			} else {
				$('.block').css('opacity','1');
			}
		});
	</script>
</head>
<body>
	<div class="block"></div>
</body>
</html>

спаибо но этот скрипт выполняет $('.block').css('opacity','0.5'); на протяжении всего скрола , не один рас..

cyber 06.10.2012 12:25

это не особо страшно


Часовой пояс GMT +3, время: 05:49.