Advertisement
Guest User

Untitled

a guest
Sep 27th, 2010
836
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script>
  5.  
  6. var EventListener = function(element, callback) {
  7.     this._el = element;
  8.     this._cb = callback;
  9.     this._at = false;
  10.     this._hasBeenVisible = false;
  11.     this._hasBeenInvisible = true;
  12.     var  _me = this;
  13.    
  14.     window.onscroll = function() {
  15.         for (q in EventListener.queue.onvisible) {
  16.             EventListener.queue.onvisible[q].call();
  17.         }
  18.         for (q in EventListener.queue.oninvisible) {
  19.             EventListener.queue.oninvisible[q].call();
  20.         }
  21.     };
  22.    
  23.     return {
  24.         onvisible: function() {
  25.             EventListener.queue.onvisible.push(function() {
  26.                 if (!_me._at && _me._hasBeenInvisible && (window.pageYOffset + window.innerHeight) > _me._el.offsetTop && window.pageYOffset < (_me._el.offsetTop + _me._el.scrollHeight)) {
  27.                     _me._cb.call();
  28.                     _me._at = true;
  29.                     _me._hasBeenVisible = true;
  30.                 }
  31.             });
  32.             EventListener.queue.oninvisible.push(function() {
  33.                 if (_me._hasBeenVisible && ((window.pageYOffset + window.innerHeight) < _me._el.offsetTop || window.pageYOffset > (_me._el.offsetTop + _me._el.scrollHeight))) {
  34.                     _me._hasBeenInvisible = true;
  35.                     _me._hasBeenVisible   = false;
  36.                     _me._at = false;
  37.                 }
  38.             });
  39.         },
  40.         oninvisible: function() {
  41.             EventListener.queue.oninvisible.push(function() {
  42.                 if (!_me._at && _me._hasBeenVisible && ((window.pageYOffset + window.innerHeight) < _me._el.offsetTop || window.pageYOffset > (_me._el.offsetTop + _me._el.scrollHeight))) {
  43.                     _me._cb.call();
  44.                     _me._at = true;
  45.                     _me._hasBeenInvisible = true;
  46.                 }
  47.             });
  48.             EventListener.queue.onvisible.push(function() {
  49.                 if (_me._hasBeenInvisible && (window.pageYOffset + window.innerHeight) > _me._el.offsetTop && window.pageYOffset < (_me._el.offsetTop + _me._el.scrollHeight)) {
  50.                     _me._hasBeenVisible = true;
  51.                     _me._hasBeenInvisible = false;
  52.                     _me._at = false;
  53.                 }
  54.             });
  55.         }
  56.     };
  57. }
  58. EventListener.queue = {
  59.     onvisible:   [],
  60.     oninvisible: []
  61. };
  62.  
  63. function addListener(element, event, fn) {
  64.     if (typeof element == 'string')
  65.         element = document.getElementById(element);
  66.    
  67.     var listener = new EventListener(element, fn);
  68.    
  69.     if (listener['on' + event.toLowerCase()])
  70.         return listener['on' + event.toLowerCase()].call();
  71. }
  72.  
  73. window.onload = function() {
  74.     addListener('event-element', 'visible', function() {
  75.         alert("Element One Visible!");
  76.     });
  77.     addListener('event-element', 'invisible', function() {
  78.         alert("Element One Invisible!");
  79.     });
  80.     addListener('event2-element', 'visible', function() {
  81.         alert("Element Two Visible!");
  82.     });
  83.     addListener('event2-element', 'invisible', function() {
  84.         alert("Element Two Invisible");
  85.     });
  86. }
  87.  
  88. </script>
  89. </head>
  90. <body>
  91.  
  92. <h1>Hey!</h1>
  93.  
  94. <div style="height: 1500px;">
  95. Please scroll down some pixels.
  96. </div>
  97.  
  98. <p id="event-element">
  99.     This element should cast an event 'onvisible' and 'oninvisible'.
  100. </p>
  101.  
  102. <div style="height: 1000px;">
  103.    
  104. </div>
  105.  
  106. <p id="event2-element">
  107.     Another one!
  108. </p>
  109.  
  110.  
  111. </body>
  112. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement