admin管理员组文章数量:1391850
I´m trying to make a scrolling effect on the page, the scroll makes a smooth effect but it miss the real position of the items, and start to bug after a few position clicks.
For example if you click on the last item it goes there, but after that if you click on the third the scroll goes to top (?). so I think i´m missing something here. anybody knows how to correct the problem?
this is my markup:
<div id="sidebar" class="clearfix">
<ul>
<li>
<a href="#one" class="scroll">Muscles - Girls Crazy Go!</a>
</li>
<li>
<a href="#two" class="scroll">Tokyo Youth sports</a>
</li>
<li>
<a href="#three" class="scroll">Harajuku Interviews</a>
</li>
<li>
<a href="#four" class="scroll">Tokyo Youth</a>
</li>
</ul>
</div>
Div to scroll example:
<div class="cinematography_box clearfix" id="two">
<div class="cinematography_item">
<img src="img/cinematography.jpg" alt="cinematography" width="700" height="397">
</div>
<div class="cinematography_info">
</div>
</div>
and my script:
jQuery(document).ready(function($) {
$(".scroll").click(function(event){
event.preventDefault();
$('#main').animate({scrollTop:$(this.hash).offset().top}, 500);
});
});
I´m trying to do this without a plugin so if there is a solution with this code it would be better!
I´m trying to make a scrolling effect on the page, the scroll makes a smooth effect but it miss the real position of the items, and start to bug after a few position clicks.
For example if you click on the last item it goes there, but after that if you click on the third the scroll goes to top (?). so I think i´m missing something here. anybody knows how to correct the problem?
this is my markup:
<div id="sidebar" class="clearfix">
<ul>
<li>
<a href="#one" class="scroll">Muscles - Girls Crazy Go!</a>
</li>
<li>
<a href="#two" class="scroll">Tokyo Youth sports</a>
</li>
<li>
<a href="#three" class="scroll">Harajuku Interviews</a>
</li>
<li>
<a href="#four" class="scroll">Tokyo Youth</a>
</li>
</ul>
</div>
Div to scroll example:
<div class="cinematography_box clearfix" id="two">
<div class="cinematography_item">
<img src="img/cinematography.jpg" alt="cinematography" width="700" height="397">
</div>
<div class="cinematography_info">
</div>
</div>
and my script:
jQuery(document).ready(function($) {
$(".scroll").click(function(event){
event.preventDefault();
$('#main').animate({scrollTop:$(this.hash).offset().top}, 500);
});
});
I´m trying to do this without a plugin so if there is a solution with this code it would be better!
Share Improve this question edited Feb 26, 2013 at 11:36 codek asked Feb 22, 2013 at 9:15 codekcodek 3435 gold badges20 silver badges49 bronze badges 2- possible duplicate of Scroll to section by clicking list – Donal Fellows Commented Feb 22, 2013 at 9:56
- The answer of mddw is detailed and plete, it was the answers before that weren't detailed enough :) – codek Commented Mar 1, 2013 at 16:58
3 Answers
Reset to default 7 +200What you want to use here is .position() , not .offset() :
$(".scroll").click(function(event){
event.preventDefault();
var scroll_to = $('#' + $(this).data('scroll-to')).position().top;
$('#main').animate({ scrollTop:scroll_to }, 500);
});
You can quick-try it in the Google Chrome Console by typing :
$(".scroll").off("click");
$(".scroll").click(function(event){
event.preventDefault();
var scroll_to = $('#' + $(this).data('scroll-to')).position().top;
$('#main').animate({ scrollTop:scroll_to }, 500);
});
Then hit enter. It'll kill your listener and attach this new one.
Notice it's a little bit off because of your 12px margin-top
on #gallery.cinematography
. Either drop it or add 12 to scroll_to
JQuery's Doc is pretty self-explanatory, but feel free to ask if there's something you don't understand.
The top offset you're using is from the element #main
and you want it from the .scroll
element with the same id as the hash. Change the code in:
HTML:
<ul>
<li>
<a href="#one" data-scroll-to="one" class="scroll">Muscles - Girls Crazy Go!</a>
</li>
<li>
<a href="#two" data-scroll-to="two" class="scroll">Tokyo Youth sports</a>
</li>
...
jQuery:
jQuery(document).ready(function($) {
$(".scroll").click(function(event){
event.preventDefault();
var scroll_to = $('#' + $(this).data('scroll-to')).offset().top;
$('#main').animate({ scrollTop:scroll_to }, 500);
});
});
Try it
$(document).ready(function() {
$(".scroll").click(function(event){
event.preventDefault();
var obj = $.browser.webkit ? $('body') : $('html');
obj.animate({ scrollTop: $('#sidebar').offset().top }, 750, function (){
//callback function if any
});
});
});
本文标签: javascriptjQuery scroll not positioning wellStack Overflow
版权声明:本文标题:javascript - jQuery scroll not positioning well - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744770203a2624293.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论