2014-09-16 5 views
5

यह jsfiddle में डेमो है को रोकने के लिए अंतराल समय निर्धारित करने के लिए कैसे, demoजावास्क्रिप्ट स्क्रॉल

क्या मैं कर रहा है चाहता हूँ स्क्रॉल किया आइटम ('एक', 'दो', 'तीन', '4', ' 5 ',' 6 ',' 7 ') स्वचालित रूप से दिखाए गए डेमो की तरह स्क्रॉल करें, और मध्य स्थिति में होने पर 2 सेकंड रोकें। लेकिन मेरे डेमो में, यह मध्य स्थिति में रुकने के बाद थोड़ी देर के लिए ढेर होगा।

यहां स्थिति सेट करने के लिए मेरे डेमो कोड में जगह है।

if ((x == 0) || (x % 35== 0)) { 
    setTimeout(function() { 
     i.top = x + 'px'; 
    }, 1000); 
} else { 
    i.top = x + 'px'; 
} 

कोई भी मेरी मदद कर सकता है? धन्यवाद!

अद्यतन: कारण मैंने 35 सेट किया है क्योंकि मुझे पता चला है कि स्क्रॉल किए गए आइटम लगभग मध्यम स्थिति में हैं जब यह 0, -35, -70, -105, के बराबर होता है .... लेकिन जब मैं कंसोल करता हूं सभी एक्स, मैंने पाया कि एक्स का मान (31, -251) के बीच है। क्या आप जानते हैं कि प्रत्येक आइटम स्थिति के बीच में सही स्थिति कैसे प्राप्त करें? धन्यवाद!

+3

कि shakin बहुत अजीब लग रहा है –

+0

हाँ, अजीब। ऐसा लगता है कि यह मजेदार शेक के लिए सेटटाइमआउट और सेट इंटरवल (जो मेरे कोड के नीचे है) के बीच संघर्ष समय की वजह से –

+3

+1। – DontVoteMeDown

उत्तर

3

मैं अपने कोड थोड़ा,

मैं एक चर "कश्मीर" सेट कि अंतराल को सौंपा गया है संशोधित और मैं स्टॉप पर अंतराल स्पष्ट और समय समाप्ति

मेरे लिए अच्छा लग रहा है के बाद पुन: शुरू ->http://jsfiddle.net/ato0mf7u/3/ कोई अजीब shakin अब ;-D

window.onload = addScrollers; 


var i = 1; 
var arr = ['one ', 'two', 'three', '4', '5', '6', '7']; 
var mid; 
var k; 
function addScrollers() { 

    var txt = arr[0]; 
    while (i < arr.length) { 
     txt += '<p>' + arr[i] + '</p>'; 
     i++; 
    } 
    startScroll('myscroller', txt); 

} 

var speed = 10; // scroll speed (bigger = faster) 
var dR = false; // reverse direction 

var step = 1; 
function objWidth(obj) { 

    if (obj.offsetWidth) return obj.offsetWidth; 
    if (obj.clip) return obj.clip.width; 
    return 0; 
} 
function objHeight(obj) { 

    if (obj.offsetHeight) return obj.offsetHeight; 
    if (obj.clip) return obj.clip.height; 
    return 0; 
} 
function scrF(i, sH, eH) { 
    var x = parseInt(i.top) + (dR ? step : -step); 
    if (dR && x > sH) { 
     x = -eH; 
    } else if (x < 1 - eH) { 
     x = sH; 
    } 
    //when x is the times of 35, the positio is in middle 
    if ((x == 0) || (x % 35== 0)) { 
     clearInterval(k); 
     setTimeout(function() { 
      i.top = x + 'px'; 
      k = setInterval(function() { 

      scrF(i, sH, eH); 
      }, 1000/speed); 
     }, 1000); 

    } 
    else { 
     i.top = x + 'px'; 
    } 
    return x; 
} 
function startScroll(sN, txt) { 


    var scr = document.getElementById(sN); 
    var sW = objWidth(scr); 
    var sH = objHeight(scr); 
    scr.innerHTML = '<div id="' + sN + 'in" style="position:absolute; left:3px; width:' + sW + ';">' + txt + '<\/div>'; 
    var sTxt = document.getElementById(sN + 'in'); 
    var eH = objHeight(sTxt); 

    mid = (eH - sH)/2; 

    sTxt.style.top = (dR ? -eH : sH) + 'px'; 
    sTxt.style.clip = 'rect(0,' + sW + 'px,' + eH + 'px,0)'; 


    k = setInterval(function() { 

     scrF(sTxt.style, sH, eH); 
    }, 1000/speed); 

} 
+0

अपडेट करती है, यह अच्छा है कि यह काम करता है लेकिन टाइमआउट के अंदर अंतराल को रीसेट करने से यह सही क्यों होता है? मुझे बहुत उलझन में – Nunners

+0

नहीं, अंतराल को साफ़ करने के लिए इसे ठीक किया गया! मैंने इसे फिर से शुरू करने के लिए शुरू किया, प्रभावी रूप से आपको अंतराल की आवश्यकता नहीं है, बस समय-समय पर –

+0

के बाद स्क्रैफ़() को कॉल करें, आपको अंतराल की आवश्यकता होगी अन्यथा केवल 1 स्थिति को स्थानांतरित करें, है ना? फिर भी अजीब लगता है कि अंतराल को साफ़ करने का काम क्यों होगा। कम से कम मेरी आंखों में – Nunners

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