首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery动画效果不符合预期

jQuery动画效果不符合预期
EN

Stack Overflow用户
提问于 2017-07-09 08:14:46
回答 3查看 20关注 0票数 0

由于某种原因,当我单击关闭图标时,它会像预期的那样将位置动画向下,但随后会自动恢复。

小提琴:https://jsfiddle.net/fq7na1zr/

如果您转到小提琴并单击橙色框,它将为其位置设置动画,并向您显示X以关闭它。

当您单击X时,它会再次向下动画div,但随后它会再次向上拍摄。

如何让div保持不变?

HTML:

代码语言:javascript
运行
复制
    <div data-position="down" id="container">
        <div id="close" style="display: none;">X</div>
    lorem ipsum dolor sit amet
    </div>

jQuery:

代码语言:javascript
运行
复制
  $('#container').click(function() {
            var currentState = $(this).data('position');

            if (currentState == "down") {
                $('#container').animate({bottom: "20%"});
                $('#container').attr('data-position','up');
                $('#close').css('display','block');
            }

        });

        $('#close').click(function() {
            $('#container').animate({bottom: "-100%"});
            $('#container').attr('data-position','down');
            $('#close').css('display','none');
        });
EN

回答 3

Stack Overflow用户

发布于 2017-07-09 08:22:09

之所以会发生这种情况,是因为当您单击X时,容器单击事件也会被触发,因为单击通过了,所以您首先会得到"X“单击事件上发生的任何事情,然后是.container单击事件中发生的任何事情,正如预期的那样,它将返回。您应该设置一些像"isDown“这样的标志,并在相关时将其设置为true或false,并在每个事件处理程序中使用它创建一个if条件,以避免这两个操作都发生。

票数 0
EN

Stack Overflow用户

发布于 2017-07-09 08:23:19

没有必要用JavaScript把它变得过于复杂。只需切换CSS类:

HTML

代码语言:javascript
运行
复制
<div id="container">
  <div id="close">X</div>
  lorem ipsum dolor sit amet
</div>

CSS

代码语言:javascript
运行
复制
#container {
  position: fixed;
  bottom: 0%;
  background-color: #f0ad4e;
  color: #000;
  padding: 10px 0;
  font-size: 20px;
  width: 100%;
  cursor: pointer;
  transition: all 0.5s ease-out;
}

#container.up {
  bottom: 20%;
}

#container.down {
  bottom: -100%;
}

#container.up #close {
  display: block;
}

#close {
  display: none;
}

JS

代码语言:javascript
运行
复制
var $container = $('#container')
var $close = $('#close')

$container.click(() => $container.addClass('up'))
$close.click(() => $container.addClass('down'))

JSFiddle演示:

票数 0
EN

Stack Overflow用户

发布于 2017-07-09 08:30:34

代码语言:javascript
运行
复制
 event.stopPropagation();

将会解决你的问题。因为您还单击了#close div和#container div。使用event.stopPropagation();可以防止调用#container div的事件侦听器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44991863

复制
相关文章

相似问题

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