【问题标题】:Long code into function? [closed]长代码成函数? [关闭]
【发布时间】:2013-02-18 19:07:29
【问题描述】:

此代码在我的页面中没有错误,因此我不在那里寻求任何帮助。我只是好奇是否有更短的方法可以做到这一点,有很多代码被重复,每次只更改一些类名。我可以在某种函数或循环中缩短它吗?谢谢

//menu
            $('.aboutOne').click(function(){
                $.scrollTo('.basicsRow', 1000, {axis:'yx'});
                $.scrollTo('.basicsRow', 1000, {axis:'xy'});
            })
            $('.aboutTwo').click(function(){
                $.scrollTo('.storyRow', 1000, {axis:'yx'});
                $.scrollTo('.storyRow', 1000, {axis:'xy'});
            })
            $('.aboutThree').click(function(){
                $.scrollTo('.teamRow', 1000, {axis:'yx'});
                $.scrollTo('.teamRow', 1000, {axis:'xy'});
            })

            $('.aboutOne').click(function(){
                $.scrollTo('.basicsRow', 1000, {axis:'yx'});
                $.scrollTo('.basicsRow', 1000, {axis:'xy'});
            })
            $('.aboutTwo').click(function(){
                $.scrollTo('.storyRow', 1000, {axis:'yx'});
                $.scrollTo('.storyRow', 1000, {axis:'xy'});
            })
            $('.aboutThree').click(function(){
                $.scrollTo('.teamRow', 1000, {axis:'yx'});
                $.scrollTo('.teamRow', 1000, {axis:'xy'});
            })
            $('.titleOne').click(function(){
                $.scrollTo('.homeRow', 1000, {axis:'yx'});
                $.scrollTo('.homeRow', 1000, {axis:'xy'});
            })
            $('.docsOne').click(function(){
                $.scrollTo('.startRow', 1000, {axis:'yx'});
                $.scrollTo('.startRow', 1000, {axis:'xy'});
            })
            $('.docsTwo').click(function(){
                $.scrollTo('.pinpointRow', 1000, {axis:'yx'});
                $.scrollTo('.pinpointRow', 1000, {axis:'xy'});
            })
            $('.docsThree').click(function(){
                $.scrollTo('.swipeRow', 1000, {axis:'yx'});
                $.scrollTo('.swipeRow', 1000, {axis:'xy'});
            })
            $('.docsFour').click(function(){
                $.scrollTo('.restRow', 1000, {axis:'yx'});
                $.scrollTo('.restRow', 1000, {axis:'xy'});
            })
            $('.docsFive').click(function(){
                $.scrollTo('.actionRow', 1000, {axis:'yx'});
                $.scrollTo('.actionRow', 1000, {axis:'xy'});
            })
            $('.contactOne').click(function(){
                $.scrollTo('.contactRow', 1000, {axis:'yx'});
                $.scrollTo('.contactRow', 1000, {axis:'xy'});
            })
            $('.downloadOne').click(function(){
                $.scrollTo('.downloadRow', 1000, {axis:'yx'});
                $.scrollTo('.downloadRow', 1000, {axis:'xy'});
            })

【问题讨论】:

  • HTML 也会很有帮助。
  • 我确定这是否是一个错字,但你有元素 .aboutX 重复了两次
  • 哈!你说得对,我愿意。哎呀

标签: javascript jquery css loops scrollto


【解决方案1】:

也许把所有东西都放到一个对象中,然后传递给一个函数:

var els = {
     '.aboutTwo':'.teamRow',
     '.aboutThree':'.homeRow',
     ...
};

function menu(els){
     $.each(els, function(a,b){
         $(a).click(function(){
            $.scrollTo(b, 1000, {axis: "yx"});
            $.scrollTo(b, 1000, {axis: "yx"});
         });
     });
}

// Call it
menu(els);

应该给您最大的可管理性 - 如果有任何变化,您只需修改 els 对象。

注意:想借此机会指出建议您使用 jQuery 的 .on() (Docs) 来绑定事件。

【讨论】:

  • 由于某种原因这不起作用。
  • @AlexTheGoodman,好吧,你可以试试my answerBlazemonger's answer,它们都提供了一些有趣的可能性
  • @Fluidbyte, .on().click()内部使用
  • @AlexTheGoodman - 现在应该可以工作了 - 这是一个显示警报的小提琴,因为我没有你的 HTML - jsfiddle.net/fluidbyte/9LvEz
【解决方案2】:

我会为每个可点击元素添加data- 属性,以指定您希望它滚动到的内容:

 <a class="clicktoscroll aboutOne" data-row="basicsRow">...</a>

现在您只需要一个事件处理程序:

        $('.clicktoscroll').click(function(){
            var $row = $(this).data('row');
            $.scrollTo('.' + $row, 1000, {axis:'yx'});
            $.scrollTo('.' + $row, 1000, {axis:'xy'});
        })

【讨论】:

    【解决方案3】:

    您可以使用data-* 属性,比如data-scroll-to,并让您的元素控制您想要滚动到的位置。

    <button class="about" data-scroll-to=".basicsRow">Button</button>
    

    例如,

    $("[data-scroll-to]").each(function() {
        var $this = $(this), target = $this.data("scroll-to");
        $this.click(function() {
            $.scrollTo(target, 1000, { axis: 'yx' });
            $.scrollTo(target, 1000, { axis: 'xy' });
        });
    });
    

    【讨论】:

    • 如果你在 data 属性中放置一个连字符,jQuery 参数应该是驼峰式(从 jQuery 1.6 开始):$(this).data("scrollTo");
    • @Blazemonger,我们的答案完全一样。猜猜最后是谁发的:|
    • @Blazemonger,顺便说一下,jQuery 自己做转换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2011-03-24
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多