我的问题是,如果我从另一个页面单击目标链接,它将转到目标但不会向下滚动到页面的正确部分。几个小时后,这是我的修复:
注意:我正在使用ember-cli
,emblem
和ember 1.8
我的navigation bar
(在application.emblem
)中的链接
li
a#concept-link click=jumpToConcept
| Le Concept
然后,如果我已经在页面上,我只需向上滚动即可。如果我还没有在页面上,那么我会使用查询参数转到该页面concept=true
action
在application controller
scrollToConcept: function() {
Ember.$(document).ready(
Ember.$('html, body').animate({
scrollTop: Ember.$("#concept").offset().top
}, 750)
)
},
//allow clicking of link with specific id to go to that part of page
jumpToConcept : function(){
if (this.get('currentPath') === 'index') {
this.send('scrollToConcept');
} else {
this.transitionToRoute('index', { queryParams: {concept: true}});
}
}
然后index controller
我添加concept query params
export default Ember.Controller.extend(
queryParams: ['concept'],
concept: null
}
然后,我在(我刚刚访问的页面)中添加一个scrollToConcept
事件,该事件index view
监听页面加载并检查concept queryParam
. 如果concept=true
我然后滚动到页面的概念部分。
index view
scrollToConcept: function() {
if (this.controller.get('concept') === 'true') {
Ember.$('html, body').animate({
scrollTop: Ember.$("#concept").offset().top
}, 750);
}
}.on('didInsertElement')
然后对于 normal index links
,我添加了一个设置concept=null
,以便concept query param
不会显示在 url 中。
链接nav bar
a click=goToIndex
h3 id={logoClass} Happy Dining
然后在application controller
我去index route
,设置concept query param
为null(所以它不会显示在url中)并滚动到顶部(以防它在页面上较低)
actions: {
goToIndex: function() {
this.transitionToRoute('index', { queryParams: {concept: null}});
Ember.$(window).scrollTop(0);
}
}
希望对以后的人有所帮助!!!