Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有更优雅的方式用javascript编写?_Javascript_Jquery - Fatal编程技术网

有没有更优雅的方式用javascript编写?

有没有更优雅的方式用javascript编写?,javascript,jquery,Javascript,Jquery,我正在使用该代码滚动到页面的底部/顶部。我想知道是否有更好的方式来写?我不熟悉jquery,所以我不确定,但我听说使用事件。preventDefault()可能比使用返回false更好?如果是这样,我将在哪里插入?当然: $(function () { $('#button').click(function () { $('html, body').animate({ scrollTop: $(document).height() }, 400)

我正在使用该代码滚动到页面的底部/顶部。我想知道是否有更好的方式来写?我不熟悉jquery,所以我不确定,但我听说使用
事件。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()
调用

另外,我建议给底部按钮id
bottom
,而不是
按钮
:)例如


使用专门的插件

演示:


此外,如果您想要更灵活的代码,您可以执行以下操作

$(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>