有没有更优雅的方式用javascript编写?
我正在使用该代码滚动到页面的底部/顶部。我想知道是否有更好的方式来写?我不熟悉jquery,所以我不确定,但我听说使用有没有更优雅的方式用javascript编写?,javascript,jquery,Javascript,Jquery,我正在使用该代码滚动到页面的底部/顶部。我想知道是否有更好的方式来写?我不熟悉jquery,所以我不确定,但我听说使用事件。preventDefault()可能比使用返回false更好?如果是这样,我将在哪里插入?当然: $(function () { $('#button').click(function () { $('html, body').animate({ scrollTop: $(document).height() }, 400)
事件。preventDefault()
可能比使用返回false更好?如果是这样,我将在哪里插入?当然:
$(function () {
$('#button').click(function () {
$('html, body').animate({
scrollTop: $(document).height()
},
400);
return false;
});
$('#top').click(function () {
$('html, body').animate({
scrollTop: '0px'
},
400);
return false;
});
});
根据jQuery manual return false和preventDefault执行不同的操作:
示例:取消默认操作并防止其冒泡,返回false:
$(function() {
var map = {'#button': $(document).height, '#top': '0px'};
jQuery.each(map, function(k, v) {
$(k).click(function() {
$(document.body).animate({
scrollTop:(typeof v === 'function') ? v() : v
},
400);
});
});
});
示例:使用preventDefault方法仅取消默认操作
$("a").live("click", function() { return false; })
因此,默认设置更为有限。使用a选择滚动怎么样?乙二醇
$("a").live("click", function(event){
event.preventDefault();
});
您可以通过向这些按钮中的每个按钮添加一个类,例如'navButton'
,然后将其用作选择ie-这将消除.add()
调用
另外,我建议给底部按钮idbottom
,而不是按钮
:)例如
使用专门的插件
演示:
此外,如果您想要更灵活的代码,您可以执行以下操作
$(function() {
$('#button').click(function() {
$.scrollTo('max', 400);
return false;
});
$('#top').click(function() {
$.scrollTo(0, 400);
return false;
});
});
然后,直接在html中定义滚动行为,例如
$(function() {
$(document).on('click', '[data-scroll]', function(e) {
e.preventDefault();
$.scrollTo($(this).data('scroll'), jQuery.fx.speeds._default);
});
});
滚动至页面底部
滚动到页面顶部
滚动至#我的选择器元素
演示:返回false;意外地调用event.preventDefault()和event.stopPropagation(),所以不必担心这一点。你做对了。唯一的问题是,您不需要设置html
标记的动画,只需查询$(document.body)
。“<代码>返回false 语句在您的情况下不是必需的,不需要阻止默认按钮动作或停止传播。尝试我真的认为这是退化(对于这样一个简单的任务)。”Jacob Relkin:我不认为有必要在这样的要求上使事情变得过于复杂。是的,我明白-它确实可以用更少的时间完成此外,它是干的。此外,如果我没有弄错的话,如果页面大小发生变化,这将无法正常工作,因为$(document)。高度()
是在加载页面时计算的,而不是在单击事件期间。顺便说一句,你需要交换“#top”
和“#button”
@Marcel,我明白了,现在怎么样?正如jAndy建议的那样,我已经删除了返回false代码>这也回答了问题的一部分:我是jquery新手,所以我不确定,但我听说使用event.preventDefault()可能比返回false更好?
我至少认为这是相关的,不是一个完整的答案,但我认为我仍然可以使用。
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-scrollTo/1.4.11/jquery.scrollTo.min.js"></script>
$(function() {
$('#button').click(function() {
$.scrollTo('max', 400);
return false;
});
$('#top').click(function() {
$.scrollTo(0, 400);
return false;
});
});
$(function() {
$(document).on('click', '[data-scroll]', function(e) {
e.preventDefault();
$.scrollTo($(this).data('scroll'), jQuery.fx.speeds._default);
});
});
<button data-scroll="max">scroll to page bottom</button>
<button data-scroll="0">scroll to page top</button>
<button data-scroll="#my_selector">scroll to #my_selector element</button>