首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在使用jQuery切换工具条时遇到了问题

我在使用jQuery切换工具条时遇到了问题
EN

Stack Overflow用户
提问于 2009-02-11 15:41:38
回答 4查看 2.7K关注 0票数 1

我正在尝试使用jquery创建一个简单的切换侧边栏,当按下按钮时,侧边栏将展开和收缩。按下该按钮时,该按钮也会变为另一种类型的按钮。侧边栏将会扩展,但由于某些原因,它不会移回原来的位置。您可以在http://www.jqueryhelp.com/viewtopic.php?p=4241#4241上查看javascript和html的副本

这是工作代码,谢谢Bendeway!:D

代码语言:javascript
复制
$(".btn-slide").live('click', function(e){ 
   e.preventDefault();

   $("#sidebar").animate({opacity: "show", left: 250}, "slow"); 
   $(this).toggleClass("btn-slide").toggleClass("active");
}); 

$(".active").live('click', function(e){ 
   e.preventDefault();

   $("#sidebar").animate({opacity: "hide", left: 100}, "slow"); 
   $(this).toggleClass("btn-slide").toggleClass("active");
});
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-11 15:51:53

尝试使用带负数的left而不是right。此外,我建议使用preventDefault而不是返回false。

代码语言:javascript
复制
$(".active").click(function(e){ 
   e.preventDefault();

   $("#sidebar").animate({opacity: "hide", left: -250}, "slow"); 
   $(this).toggleClass("btn-slide");
}); 

更新

我刚刚注意到的另一件事是,当文档准备好时,您将一个单击事件附加到.active按钮,但是当文档准备好时,没有.active按钮,该按钮在您更改文档后进入。这里有几个选项。

首先是使用jQuery1.3的新live特性

代码语言:javascript
复制
$(".btn-slide").live('click', function(e){ 
   e.preventDefault();

   $("#sidebar").animate({opacity: "hide", left: 250}, "slow"); 
   $(this).toggleClass("btn-slide").toggleClass("active");
}); 

$(".active").live('click', function(e){ 
   e.preventDefault();

   $("#sidebar").animate({opacity: "hide", left: -250}, "slow"); 
   $(this).toggleClass("btn-slide").toggleClass("active");
}); 

另一种选择是在不同的修饰符上设置单击事件(例如,可能是在id上)。

代码语言:javascript
复制
<span>News  <img src="img/overlay.png" id="sliderButton" class="btn-slide" alt="" /></span>     

然后使用它来处理点击

代码语言:javascript
复制
$("#sliderButton").click(function(e){ 
  e.preventDefault();

  $(this).is('.btn-slide').each(function() {
   $("#sidebar").animate({opacity: "show", left: 250}, "slow"); 
  });

  $(this).is('.active').each(function() {
   $("#sidebar").animate({opacity: "hide", left: -250}, "slow"); 
  });
  $(this).toggleClass("active").toggleClass('btn-slide');  
}); 

或者更简洁的说法

代码语言:javascript
复制
$("#sliderButton").click(function(e){ 
  e.preventDefault();

  var animationSettings = {opacity: "show", left: 250};
  if ($(this).hasClass('active') )
  {
    animationSettings = {opacity: "hide", left: -250};
  } 

  $("#sidebar").animate(animationSettings , "slow"); 
  $(this).toggleClass("active").toggleClass('btn-slide');  
}); 

我能想到的最后一种选择是在更改单击事件后设置它们,但我不会这样做,所以我不会提供示例。

最后,我会在你的活动回调中加入警告,并确保你的活动按钮事件正在被触发。

票数 3
EN

Stack Overflow用户

发布于 2009-02-11 15:59:18

按照你的逻辑编写方式,我认为你需要在你的点击处理程序中的两个类上做一个'toggleClass‘,这将添加一个并删除另一个。例如,当您的“活动”项被单击时,您将切换(添加) btn-slide类,但这也会使“活动”类留在原地。

当然,除了使用"toggleClass“之外,您还可以使用"addClass”和"removeClass“来表达得更明确。

我建议使用像Firebug这样的工具来观察DOM中发生的事情。

代码语言:javascript
复制
$(document).ready(function(){

   $(".btn-slide").click(function(){
   $("#sidebar").animate({opacity: "show", left: "250"}, "slow");
   $(this).toggleClass("active");  // add class
   $(this).toggleClass("btn-slide"); // remove class
   return false;
   });   

});

$(document).ready(function(){

   $(".active").click(function(){
   $("#sidebar").animate({opacity: "hide", right: "250"}, "slow");
   $(this).toggleClass("active");  // remove class
   $(this).toggleClass("btn-slide");  // add class
   return false;
   });
}); 
票数 0
EN

Stack Overflow用户

发布于 2009-02-12 07:52:14

这是可行的。

代码语言:javascript
复制
$(document).ready(function(){
    $(".btn-slide").click(function(){
        $("#sidebar").slideToggle("slow");
        $(this).toggleClass("active"); return false;
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/537381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档