2015-03-31 85 views
0

我想滾動到我的應用程序的特定目標 - 是這樣的:scrollTop的偏移時改變

var editor = self.$el.find(".editorWrapper[data-containerid=" + containerId + "]").closest('.containerWrapper'); 
$('html, body').animate({ 
    scrollTop: editor.position().top-5 
}, 1000); 

的問題是,有哪個渲染,同時向下滾動元素 - >例如圖像或iframe在向下滾動時呈現。我不知道該新渲染元素的高度(難以獲得高度 - 但並非不可能),滾動停在錯誤的位置。有一種簡單的方法可以順利滾動到一個元素,而偏移量/高度變化,然後保存每個「新渲染」元素的高度?

回答

1

我只要向下滾動,直到它實際找到特定點。例如:

function ScrollTo(el) { 
 
    if ($('html').scrollTop() < (el.position().top - 5)) { 
 
     $('html').animate({ 
 
      scrollTop: $('html').scrollTop() + 1 
 
     }, 1, 'swing', function() { 
 
      ScrollTo(el);    
 
     }); 
 
    } 
 
} 
 
ScrollTo($('#scrollTo'));
div { 
 
    width:400px; 
 
} 
 
#large { 
 
    height:400px; 
 
    background:red; 
 
} 
 
#scrollTo { 
 
    height:400px; 
 
    background:green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="large"></div> 
 
<div id="scrollTo"></div>

你可以玩的設置,使其滾動在一個體面的速度爲你等

+0

偉大的事情!工作:) – 2015-03-31 15:10:49

0

您希望自己的網頁完全加載,你可以打電話給你的腳本中:

$(document).load(function() { 
    var editor = self.$el.find(".editorWrapper[data-containerid=" + containerId + "]").closest('.containerWrapper'); 
    $('html, body').animate({ 
    scrollTop: editor.position().top-5 
}, 1000); 
}); 

https://api.jquery.com/load-event/

+0

啊 - 但我使用「lazyload」技術一個原因。我使用http://embed.ly/,並且我不希望客戶端加載所有內容,即使它不在視口中。 – 2015-03-31 13:49:19

0

滾動條的位置很可能將每次改變圖像/ iframe中獲取呈現,所以最好方式是將加載事件綁定到更新scrollTop位置的這些元素(image/iframe)。

+0

這是一個好點 - 但我怎麼能動態地添加一個偏移量,而它是滾動?:) – 2015-03-31 14:11:05

+0

我做了一個快速演示:http://jsfiddle.net/jq2hfmnf/1/ – 2015-04-01 08:21:21

+0

真的很感激它;)謝謝!也看看傑米·巴克的答案;) – 2015-04-01 08:59:40