2016-04-05 15 views
0

Web sitemde sayfamın ilgi alanımın kimliğine kaydırılmasını istiyorum. neden yerine bu kodusetTimeout'a çoklu komut nasıl ayarlanır

setTimeout(function(){ 
    window.scrollTo(0, leapY); 
}, timer*speed); 
yazarsanız: İhtiyacım tam olarak ne

var $scope, $location; 
var headerHeigh = 50; 
angular.module('allApps').service('anchorSmoothScroll', function(){ 

    this.scrollTo = function(eID) { 

     var startY = currentYPosition(); 
     var stopY = elmYPosition(eID)-headerHeigh; 
     var distance = stopY > startY ? stopY - startY : startY - stopY; 
     if (distance < 100) { 
      scrollTo(0, stopY); return; 
     } 
     var speed = Math.round(distance/50); 
     if (speed >= 20) speed = 20; 
     var step = Math.round(distance/25); 
     var leapY = stopY > startY ? startY + step : startY - step; 
     var timer = 0; 

     if (stopY > startY) { 
      for (var i=startY; i<stopY; i+=step) { 
       setTimeout("window.scrollTo(0, "+leapY+")", timer*speed); 
       leapY += step; if (leapY > stopY) leapY = stopY; timer++; 

      } return; 
     } 
     for (var i=startY; i>stopY; i-=step) { 
      setTimeout("window.scrollTo(0, "+leapY+")", timer * speed); 
      leapY -= step; if (leapY < stopY) leapY = stopY; timer++; 
     } 


     function currentYPosition() { 
      // Firefox, Chrome, Opera, Safari 
      if (self.pageYOffset) return self.pageYOffset; 
      // Internet Explorer 6 - standards mode 
      if (document.documentElement && document.documentElement.scrollTop) 
       return document.documentElement.scrollTop; 
      // Internet Explorer 6, 7 and 8 
      if (document.body.scrollTop) return document.body.scrollTop; 
      return 0; 
     } 

     function elmYPosition(eID) { 
      var elm = document.getElementById(eID); 
      var y = elm.offsetTop; 
      var node = elm; 
      while (node.offsetParent && node.offsetParent != document.body) { 
       node = node.offsetParent; 
       y += node.offsetTop; 
      } return y; 
     } 

    }; 

}); 

angular.module('allApps').controller('menuCtrl', function($scope, $location, anchorSmoothScroll) { 

    $scope.gotoElement = function (eID){ 
     $location.hash(eID); 
     anchorSmoothScroll.scrollTo(eID); 

    }; 
    }); 

Benim sorum (Sadece orijinal bazı küçük düzenlemeler yapılmış) anlamına stackoverflow burada bu güzel kodunu buldum

"Kaydırma efekti" ni kaybediyorum?

Bunu yapmak istememin nedeni, kaydırma işlemi ile birlikte, kaydırma sırasında bir opaklığın değişmesi gibi bir efektin olmasını istiyorum, bu yüzden bunu setTimeout içine koymak istiyorum, birden fazla işlemle bir işlev olabilir.

+0

sen * Hız 'de – gurvinder372

+0

' zamanlayıcı artırmak gerekir? – Andy

+0

Anlamıyorum. Eğer orijinal setTimeout ("window.scrollTo (0," + leapY + ")", zamanlayıcı * hız) gibi yazıyorsam, "çalışıyor. Farkı göremiyorum –

cevap

0

Sen döngüler için hem içeride bu kodu kullanabilirsiniz yardımcı olmak için

Teşekkür: `hız x 0` her zaman 0 olacağı için

(function(leapY) { 
    setTimeout(function(){ 
     window.scrollTo(0, leapY); 
    }, timer*speed); 
})(leapY); 
İlgili konular