2015-08-21 21 views
6

मैं एक समारोह अगर वस्तु अपनी स्क्रीन के भीतर है कि बुलाया जाएगा संबंध में भी प्रश्न मिला है। लेकिन जब ऑब्जेक्ट मेरी स्क्रीन के भीतर होता है तो फ़ंक्शन को कॉल किया जाता है और एक चेतावनी निकाल दी जाती है। लेकिन अगर मैं अलर्ट बंद करता हूं और आगे स्क्रॉल करता हूं तो ईवेंट को फिर से बुलाया जाता है। मैं नहीं चाहता कि। मैं इसे कैसे हल कर सकता हूं?कॉल समारोह केवल एक बार

Working example

मेरे कोड अब तक:

<div id="wrapper"> 
    scroll down to see the div 
</div> 
<div id="tester"></div> 

जे एस

$(window).on('scroll',function() { 
    if (checkVisible($('#tester'))) { 
     alert("Visible!!!")   
    } else { 
     // do nothing 
    } 
}); 

function checkVisible(elm, eval) { 
    eval = eval || "object visible"; 
    var viewportHeight = $(window).height(), // Viewport Height 
     scrolltop = $(window).scrollTop(), // Scroll Top 
     y = $(elm).offset().top, 
     elementHeight = $(elm).height(); 

    if (eval == "object visible") return ((y < (viewportHeight + scrolltop)) && (y > (scrolltop - elementHeight))); 
    if (eval == "above") return ((y < (viewportHeight + scrolltop))); 
} 

क्या मैं चाहता हूँ कि अगर समारोह केवल 1 समय बुलाया जाएगा और हर पुस्तक में नहीं है अगर वस्तु दिखाई दे रही है। , अंदर

$(window).one('scroll',function() { 
    // Stuff 
}); 

या लिंक रहित घटना:

उत्तर

11

.one() उपयोग करने का प्रयास

$(window).on('scroll',function() { 
    // After Stuff 
    $(window).off('scroll'); 
}); 

लगता आप इस कोड पड़ सकता है:

$(window).on('scroll',function() { 
    if (checkVisible($('#tester'))) { 
     alert("Visible!!!"); 
     $(window).off('scroll'); 
    } else { 
     // do nothing 
    } 
}); 

फिडल: http://jsfiddle.net/c68nz3q6/

+1

हाँ का उपयोग करें। आपका आखिरी कोड स्निपेट चाल था! मदद के लिये शुक्रिया! मैं 11 मिनट के बाद – Rotan075

-3

जब $ परीक्षण आप स्क्रीन के भीतर है, घटना श्रोता को हटा दें।

$(window).on('scroll',function() { 
    if (checkVisible($('#tester'))) { 
     alert("Visible!!!") 
     $(window).off('scroll'); 
    } else { 
    // do nothing 
    } 
}); 
+4

अपने जवाब को स्वीकार करेंगे कैसे मेरे कोड से अलग है? क्या यह सिर्फ एक प्रति नहीं है? –

1

चलिए जावास्क्रिप्ट में अपनी समस्या को हल करने का प्रयास करते हैं क्योंकि यहां सभी उत्तरों jquery में हैं। के रूप में ब्राउज़र के रूप में लंबे समय के रूप पेज ताज़ा नहीं है अपने मूल्य को बरकरार रखे हुए आप वैश्विक चर का उपयोग कर सकते हैं। उन सभी चर समारोह के बाहर घोषित वैश्विक चर कहा जाता है और किसी भी समारोह द्वारा पहुँचा जा सकता।

window.onscroll = myScroll; 
 
var counter = 0; // Global Variable 
 
function myScroll(){ 
 
    var val = document.getElementById("value"); 
 
    val.innerHTML = 'pageYOffset = ' + window.pageYOffset; 
 
    if(counter == 0){ // if counter is 1, it will not execute 
 
    if(window.pageYOffset > 300){ 
 
     alert('You have scrolled to second div'); 
 
     counter++; // increment the counter by 1, new value = 1 
 
    } 
 
    } 
 
    }
#wrapper,#tester { 
 
    width: 300px; 
 
    height: 300px; 
 
    border: 1px solid black; 
 
    padding: 10px; 
 
    } 
 
#wrapper p { 
 
    text-align: center; 
 
    } 
 
#tester { 
 
    border: 1px solid crimson; 
 
    } 
 
#value { 
 
    position: fixed; 
 
    left: auto; 
 
    right: 40px; 
 
    top: 10px; 
 
    }
<p id = "value"></p> 
 
<div id="wrapper"> 
 
    <p>scroll down to div to see the alert</p> 
 
</div> 
 
<div id="tester"></div>

-1

एक समारोह नाम

function fname() 
{ 
} 
$(window).on('scroll',fname); 
$(window).off('scroll',fname); 
+2

, बेहतर अपने समाधान समझाने कृपया याद रखें कि किसी को भविष्य में इस पढ़ा जाएगा। –

+2

हालांकि यह कोड स्निपेट प्रश्न हल कर सकता है, [एक स्पष्टीकरण सहित] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। – DimaSan

संबंधित मुद्दे