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>


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


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