2012-08-30 24 views
6

मैं इस फ़ंक्शन में धीरे-धीरे एक आसान/एनीमेशन/कैसे जोड़ सकता हूं? इस समय यह सिर्फ कूदता है। अब इसे एनीमेशन के साथ "एंकर" में ले जाना चाहिए।एनीमेशन के साथ स्क्रॉल करने के लिए

<script type='text/javascript'> 
     setTimeout("window.scrollBy(0,270);",3000); 
</script> 
+3

** कभी ** एक स्ट्रिंग पारित करने के लिए 'setInterval()' या 'setTimeout()'। ऐसा करना 'eval()' का उपयोग करने जितना बुरा है और इसके परिणामस्वरूप आप चर के उपयोग के रूप में जल्द ही अपठनीय और संभावित रूप से असुरक्षित कोड में परिणाम प्राप्त करते हैं क्योंकि आपको वास्तविक चर पारित करने के बजाय उन्हें स्ट्रिंग में डालने की आवश्यकता होती है। उचित समाधान 'सेट इंटरवल (फ़ंक्शन() {/ * आपका कोड *)}, msecs) है; '। यह 'setTimeout() 'पर लागू होता है। यदि आप बिना किसी तर्क के एक समारोह को कॉल करना चाहते हैं, तो आप फ़ंक्शन नाम को सीधे पास भी कर सकते हैं: 'setInterval (someFunction, msecs);' (ध्यान दें कि फ़ंक्शन नाम के पीछे ** नहीं ** '()' है) – ThiefMaster

+0

इसके लिए कुछ मौजूदा लाइब्रेरी का उपयोग करने पर विचार करें। – ThiefMaster

+0

यह एक अच्छा अच्छा है, लेकिन पेज को कितना सेकंड स्क्रॉल करना चाहिए इसके बाद मैं समय कैसे जोड़ सकता हूं http://flesler.blogspot.se/2007/10/jqueryscrollto.html – Max

उत्तर

1

इसे अपने आप को मिल गया। वर्डप्रेस और jquery.noConflict मोड के कारण मुझे कोड को संशोधित करना था:

<script type="text/javascript"> 
     (function($){ 
     $(document).ready(function(){ 
      setTimeout(function() { 
      $('body').scrollTo('300px', 2500); 
     }, 3000); 
     }); 
     }(jQuery)); 
</script> 

सभी के लिए धन्यवाद !!!

0

jQuery का उपयोग करना स्क्रूटो प्लगइन के साथ शायद यह अधिक आसान बनाता है।

<script type='text/javascript' src='js/jquery.1.7.2.min.js'></script> 
<script type='text/javascript' src='js/jquery.scrollTo-min.js'></script> 
<script type='text/javascript' src='js/jquery.easing.1.3.js'></script><!-- only for other easings than swing or linear --> 
<script type='text/javascript'> 
$(document).ready(function(){ 
    setTimeout(function() { 
    $('html,body').scrollTo({top:'30%', left:'0px'}, 800, {easing:'easeInBounce'}); 
}, 3000); 
}); 
</script> 
बेशक

आप स्क्रिप्ट डीएल की जरूरत है: http://flesler.blogspot.se/2007/10/jqueryscrollto.html

एक समाधान इस तरह के विचार करें। जब jQuery का उपयोग कर

एक काम उदाहरण

+0

और मैं कितने समय के बाद समय जोड़ सकता हूं पृष्ठ को स्क्रॉल करना चाहिए सेकंड? – Max

+0

jQuery का उपयोग करके आप आसानी से देरी सेट करने के लिए सुझाए गए समय के साथ टाइमआउट का उपयोग कर सकते हैं, उदाहरण: http://stackoverflow.com/questions/1836105/how-to-wait-5-seconds-with-jquery – jtheman

+0

मैंने कोशिश की। लेकिन यह काम नहीं करता है। 'कोड' <स्क्रिप्ट टाइप = 'टेक्स्ट/जावास्क्रिप्ट'> \t \t $ (दस्तावेज़)।तैयार (फ़ंक्शन() { \t \t $ ('विंडो')। देरी (3000) .scrollTo (30%, 0, 800, {easing: 'elasout'}); \t}); \t \t 'कोड' – Max

32

भी सादा जावास्क्रिप्ट का उपयोग कर अनुरोध एनीमेशन फ्रेम के साथ संभव ..

// first add raf shim 
// http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/ 
window.requestAnimFrame = (function(){ 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function(callback){ 
      window.setTimeout(callback, 1000/60); 
      }; 
})(); 

// main function 
function scrollToY(scrollTargetY, speed, easing) { 
    // scrollTargetY: the target scrollY property of the window 
    // speed: time in pixels per second 
    // easing: easing equation to use 

    var scrollY = window.scrollY, 
     scrollTargetY = scrollTargetY || 0, 
     speed = speed || 2000, 
     easing = easing || 'easeOutSine', 
     currentTime = 0; 

    // min time .1, max time .8 seconds 
    var time = Math.max(.1, Math.min(Math.abs(scrollY - scrollTargetY)/speed, .8)); 

    // easing equations from https://github.com/danro/easing-js/blob/master/easing.js 
    var PI_D2 = Math.PI/2, 
     easingEquations = { 
      easeOutSine: function (pos) { 
       return Math.sin(pos * (Math.PI/2)); 
      }, 
      easeInOutSine: function (pos) { 
       return (-0.5 * (Math.cos(Math.PI * pos) - 1)); 
      }, 
      easeInOutQuint: function (pos) { 
       if ((pos /= 0.5) < 1) { 
        return 0.5 * Math.pow(pos, 5); 
       } 
       return 0.5 * (Math.pow((pos - 2), 5) + 2); 
      } 
     }; 

    // add animation loop 
    function tick() { 
     currentTime += 1/60; 

     var p = currentTime/time; 
     var t = easingEquations[easing](p); 

     if (p < 1) { 
      requestAnimFrame(tick); 

      window.scrollTo(0, scrollY + ((scrollTargetY - scrollY) * t)); 
     } else { 
      console.log('scroll done'); 
      window.scrollTo(0, scrollTargetY); 
     } 
    } 

    // call it once to get started 
    tick(); 
} 

// scroll it! 
scrollToY(0, 1500, 'easeInOutQuint'); 
+0

यह एक अच्छा जवाब है और मुझे कल्पना करने में मदद मिली जावास्क्रिप्ट का उपयोग अपनी मुख्य सुविधाओं को बढ़ाने के लिए उन्नत तकनीकों। धन्यवाद! – vars

+0

IE11 समर्थन के लिए, आप 'window.scrollY' के बजाय' window.pageYOffset' का उपयोग कर सकते हैं। –

4

this answer से अनुकूलित:

function scrollBy(distance, duration) { 

    var initialY = document.body.scrollTop; 
    var y = initialY + distance; 
    var baseY = (initialY + y) * 0.5; 
    var difference = initialY - baseY; 
    var startTime = performance.now(); 

    function step() { 
     var normalizedTime = (performance.now() - startTime)/duration; 
     if (normalizedTime > 1) normalizedTime = 1; 

     window.scrollTo(0, baseY + difference * Math.cos(normalizedTime * Math.PI)); 
     if (normalizedTime < 1) window.requestAnimationFrame(step); 
    } 
    window.requestAnimationFrame(step); 
} 

यह आपको आसानी से निर्धारित दूरी से स्क्रॉल करने के लिए अनुमति चाहिए।

+1

अच्छा जवाब, धन्यवाद। – Mirakurun

0

उपयोग इस और आपकी समस्या हल हो जाएगा

animate(document.documentElement, 'scrollTop', 0, 200); 

धन्यवाद

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