我有一个从右向左滑动的滑动switch .我有大约div elements个,我想在点击它们的时候只显示slideToggle,而不是再次点击时关闭那个div element.仅在单击slideToggle中的按钮时关闭

我怎么才能做到呢?Here is my detailed code jsfiddle

推荐答案

我已经将您的jsfiddle转换为下面的StackOverflow代码片段.

我在代码中添加了一个额外的函数slideOpen().该函数判断is_collapsed是否为true.如果满足条件,该函数将打开滑块.

这里的诀窍是在函数的末尾将is_collapsed设置为false,这样它就不会再次运行动画并关闭滑块.

现在,关闭滑块的唯一方法是单击使用slideToggle()函数的打开/关闭按钮.

请运行下面的代码片段以查看此代码的运行情况.我还在slideOpen()函数中添加了一些注释,以解释正在发生的情况.

var easing = 1;
var animation_speed = 200;
var slider_width;
var is_collapsed = true;

function slideToggle() {
  is_collapsed = $('#btn').css("margin-right") == slider_width + "px" && !$('#btn').is(':animated');
  var sign = (is_collapsed) ? '-' : '+';
  if (!$('#btn').is(':animated')) {
    if (easing) $('.willSlide').animate({
      "margin-right": sign + '=' + slider_width
    }, animation_speed);
    else $('.willSlide').animate({
      "margin-right": sign + '=' + slider_width
    }, animation_speed);
  }
  (is_collapsed) ? $('.willSlide').removeClass('expanded'): $('.willSlide').addClass('expanded');
}

//function to open slide
function slideOpen() {
//if is_collapsed is true, animate div and open slider
  if (is_collapsed) {
    var sign = '+'
    $('.willSlide').animate({
      "margin-right": sign + '=' + slider_width
    }, animation_speed);
    //add expanded class to button when opened
    $('.willSlide').addClass('expanded')
    //set is_collapsed to false so it won't close slider on additional clicks
    is_collapsed = false
  }
}

$(document).ready(function() {
  slider_width = $('#content').width(); //get width automaticly
  $('#btn').click(slideToggle);
});
#content {
  position: fixed;
  height: 100%;
  background: rgb(97, 97, 97);
  width: 200px;
  right: 0px;
  margin-right: -200px;
}

#btn {
  position: fixed;
  width: 100px;
  right: 0px;
  background: rgb(117, 231, 117);
  top: 100px;
  border-radius: 5px 0px 0 5px;
  color: #fff;
  text-align: center;
  padding: 40px 0;
  cursor: pointer
}

.expandedTxt {
  display: none
}

#btn.expanded .expandedTxt {
  display: block
}

#btn.expanded .click {
  display: none
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div onclick="slideOpen()">button1</div>
<div onclick="slideOpen()">button2</div>

<div class="willSlide" id='content'></div>
<div class="willSlide" id='btn'>
  <span class="click">open</span>
  <span class="expandedTxt">close</span>
</div>

Javascript相关问答推荐

使用Astro和React的动态API

react 页面更改类别时如何返回第0页

从外部访问组件变量-Vueejs

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

无法将nPM simplex-noise包导入在JS项目中工作

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

按下同意按钮与 puppeteer 师

在Vite React库中添加子模块路径

如何粗体匹配的字母时输入搜索框使用javascript?

为什么当我解析一个promise时,输出处于挂起状态?

在我的html表单中的用户输入没有被传送到我的google表单中

构造HTML表单以使用表单数据创建对象数组

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

覆盖加载器页面避免对页面上的元素进行操作

如何在箭头函数中引入or子句?

变量在导入到Vite中的另一个js文件时成为常量.

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

MUI迷你图:如何将$符号添加到MUI迷你图中的工具提示数据