ugrás a tartalomhoz

Harc a türelmetlen felhasználóval

Joó Ádám · 2010. Jún. 4. (P), 19.13

A Twitter a sírba visz. Az egy dolog, hogy folyton kijelentkeztet, de mióta telepakolták rohangáló szövegekkel a főoldalt, vagy fél percen át tölti a szkripteket, amik közül úgy tűnik a login panelé az utolsó. Így rákattintva a böngésző átdob a bejelentkező oldalra, ahol már nem tölti ki automatikusan, s írhatom be kézzel. Hogyan csinálhatná okosabban a csiripelde?

Ha teljesítménynövelésről esik szó, szinte kötelezően elhangzik a JavaScript hivatkozások forrás végére helyezése. Ezzel nincs is semmi gond, azonban ez azzal jár, hogy eseménykezelőink csak késéssel jutnak érvényre, a türelmetlen felhasználó pedig az alapértelmezett eseménnyel fog csak találkozni.

A fenti problematikára kíván megoldással szolgálni ClickCatcher elnevezéssel Robert Nyman natív JavaScript, David Billskog pedig jQuery alapon.

A kódot a <head>-ben kell elhelyezni, betöltését követően elkapja az összes kattintást, és azokat, melyekhez saját eseménykezelőt kívánunk csatolni, várakoztatja egészen addig, míg az ezeket tartalmazó kód be nem töltődik, miután a szűrőt eltávolítja, és végül ismét kiváltja a kattintásokat a feltartóztatott elemeken.

  1. (function () {  
  2.     var QUEUE = {  
  3.         clicks: [],  
  4.           
  5.         click_handler: function (evt) {  
  6.             if ($(evt.target).hasClass("guarded")) {  
  7.                 QUEUE.clicks.push({  
  8.                     evt:    evt,  
  9.                     target: evt.target  
  10.                 });  
  11.                   
  12.                 return false;  
  13.             }  
  14.               
  15.             return true;  
  16.         }  
  17.     };  
  18.       
  19.     $(document).bind("click", QUEUE.click_handler);  
  20.       
  21.     $(document).ready(function () {  
  22.         setTimeout(function () {  
  23.             $(document).unbind("click", QUEUE.click_handler);  
  24.               
  25.             for (var i = 0, il = QUEUE.clicks.length; i < il; i++) {  
  26.                 $(QUEUE.clicks[i].target).click();  
  27.             }  
  28.         }, 0);  
  29.     });  
  30. })();  

Tömörsége miatt fent a jQuery megvalósítás olvasható, ennek természetesen megvan az a hátránya, hogy előtte a keretrendszert is be kell tölteni.

A kód érdekessége a setTimeout() használata: mint az kiderült, második argumentumát 0-nak adva elérhetjük, hogy függvényünk a load eseménykezelők közül utolsónak fusson.

 
1

Jóde ez mennyivel növeli a

Török Gábor · 2010. Jún. 5. (Szo), 15.01
Jóde ez mennyivel növeli a felhasználói élményt? A türelmetlen látogató ugyanúgy várni fog az onloadig/domloadig, és attól még türelmetlenebb lesz, hogy kattint, és nem történik semmi.

Amúgymeg használj a Twitter API-ra épülő appot twitteléshez.
2

Növeli

Joó Ádám · 2010. Jún. 6. (V), 15.16
Én kivárnám azt az időt, amíg megjön a panel, csak nem tudom, az mikor van. Egyébként pedig lehet bővíteni a kódot, hogy valami kis visszajelzést adjon a felhasználónak, hogy pillanat türelmet.