javascript - 我在使用 jQuery 切换侧边栏时遇到问题

标签 javascript jquery toggle sidebar

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

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

$(".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");
});

最佳答案

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

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

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

更新

我刚刚注意到的另一件事是,当文档准备就绪时,您将点击事件附加到 .active 按钮,但是当文档准备就绪时没有 .active 按钮出现在您更改它之后。这里有几个选项。

首先是使用新的 live jquery 1.3 的特性

$(".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 上)。

<span>News  <img src="img/overlay.png" id="sliderButton" class="btn-slide" alt="" /></span>     

然后用它来处理点击

$("#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');  
}); 

或者更简洁

$("#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');  
}); 

我能想到的最后一个选项是在您更改点击事件后设置点击事件,但我不会那样做,所以我不会提供示例。

最后,我会提醒您的事件回调并确保您的事件按钮事件实际触发。

关于javascript - 我在使用 jQuery 切换侧边栏时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/537381/

相关文章:

jquery - 在 Bootstrap 3 中使用 onclick 显示带有外部链接的选项卡

html - 使用复选框在调整后的大小和带有滚动条的原始大小之间切换图像大小

Javascript 切换不能正常工作

javascript - 如何将二进制数转换为带符号的十进制数

javascript - 如何查询存储在 mongoDB 数组中的对象

javascript - 我正在尝试动态添加多个 tagit 字段,但它对我不起作用

javascript - jQuery 选择排序更改页面刷新时显示的选项。发生了什么?

javascript - 我无法在我的 html 页面中显示 ajax 请求响应

javascript - FlipClock 时间值来自 MySQL 数据库,刷新时不重置

单击链接时 jQuery 切换跨度类