【问题标题】:Toggling background position on click单击时切换背景位置
【发布时间】:2012-09-27 16:02:51
【问题描述】:

我正在努力实现这个Is there an easy way to toggle background position between two states on click event?

我已经构建了一个应该工作的函数.. 不知道为什么它不会。对于我的项目中如此乏味的部分,我花了几个小时试图实现这一点,但这是必要的。

请看一下这个函数:

$("#secondarrow").click(function(){
    /*$(".arrows").toggle( 
    function(){ 
        $(this).css({"background-position":"0px 0px"}); 
    },  
    function(){ 
        $(this).css({"background-position":"0px -30px"}); 
    });*/
    /*$(".arrows").toggleClass(function() {
    if ($(this).is(".arrows")) {
    return ".arrowsup";
    } else {
    return ".arrows";
    }
    });*/
    $('#secondarrow').toggle(function() { 
    $("#arrow2").css('backgroundPosition', '0px -15px'); 
    }, function() { 
    $("#arrow2").css('backgroundPosition', '0px 0px'); 
    });
$("#ukmore").slideToggle(100);
$("#clause").slideToggle(100);
});

它应该做的是,在单击 div 名称的第二个箭头时,它会显示许多子类别,并且同时切换具有 id #arrow2 的 div 子项的背景位置从指向下方的箭头(表示点击显示更多)到作为同一背景图像一部分的向上箭头(表示点击隐藏子类别)。

我尝试了许多不同的函数结构,但它们都没有按要求工作,最新的一个 - 没有被注释掉的 - 确实改变了背景位置以显示向上的箭头,但它只是这样做在第一次点击时,只有在直接点击 #arrow1 div 时才会这样做,当我需要它在点击 #secondarrow div 时来回切换。

请帮忙。

【问题讨论】:

  • 可能是一个愚蠢的问题,但它不应该是“背景位置”而不是“背景位置”吗?你也可以做一个jsFiddle吗?
  • @Antimated 别担心,我一直在问这种愚蠢的问题,你不问你不知道。不,这很好 - 我相信这是正确的 jQuery 语法,但也可以。如果您查看上一个问题,有很多内容可以为我的问题提供背景信息,包括图像和一些不起作用的解决方案。
  • 你说一个id为#arrow1的div子,你使用了类选择器(.arrow1)。尝试改变它
  • @AndreiR 抱歉,是的,我发现并在发布后更改了它,但仍然没有用。已编辑问题中的代码。

标签: jquery toggle background-position


【解决方案1】:

首先 - 你需要多练习处理事件。

.toggle 也是一个事件处理程序,因此您基本上添加了一个新的单击处理程序,用于在单击项目时进行切换。

你只需要这样做:

$("#secondarrow").toggle(function() { 
    $("#arrow2").css('backgroundPosition', '0px -15px');
    //do more stuff on first click
    }, function() { 
    $("#arrow2").css('backgroundPosition', '0px 0px'); 
    //do more stuff on second click
    });

我无法检查以上内容是否适合您。我建议也将您的代码放入 jsFiddle 以解决 stackoverflow 问题。

第二件事

最好用第二个位置创建一个css类,然后绑定一个点击事件来切换类:

$("#secondarrow").click(function(){
   $("#arrow2").toggleClass('position2');
})

还有一个提示:

使用 firebug 或 chrome 开发者工具来调试您的代码。您可以检查您的选择器是否正确。 另外,阅读选择器缓存,例如。 $element=$('.something'); $element.show()

【讨论】:

  • 谢谢!第二件事是我一直在寻找的优雅解决方案。其他人提出了非常相似的行动方案,而我已经准备好单独的课程,只需要那个关键成分。我知道解决方案不必是 5 行以上的代码。另外,感谢您的建议,我正在不断学习并欢迎它。
  • 我总是很高兴看到人们想要学习。您将从 4 小时的 jquery 强化课程中受益匪浅,从而开始您的自学。尝试从学生组织中寻找免费课程。我为我住的学生开设了一些免费课程。我想有更多的人这样做。
  • 这很有用,虽然我也在大学学习商业,编程是​​第二优先,所以我在业余时间在网上学习它。但是,筛选旧的和无用的资源可能会令人沮丧,所以当我找到好的资源时会很棒。 Stack Overflow 是一个很好的资源。
  • 我不会对你施加任何压力。我刚刚说过,如果有人先向您展示一些东西,您会节省很多时间。无论如何 - 继续玩得开心!祝你好运
  • 我终于用 AppendTo 上了一门 JS/jQuery 强化课程,现在我可以读写函数了 :) 我以前是个菜鸟。
猜你喜欢
  • 2023-04-04
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2012-06-16
  • 2022-01-13
  • 1970-01-01
相关资源
最近更新 更多