!
也想出现在这里? 联系我们
广告位

CSS元素隐藏后JS事件响应

今天探讨下 CSS 元素隐藏后 JS 事件响应问题,在我们的发布的 常见 CSS 五种隐藏元素方式 一文中,我们分享了 CSS 隐藏元素的五中常见方法,介绍的也比较详细,这里就不累述了,开门见山直入主题,如果被隐藏的元素绑定了一些事件,我们执行了相关操作后,这些事件是否会被响应并执行呢,看看下面的一段简单的代码

  1. <style>
  2. div {
  3. width: 100px;
  4. height: 100px;
  5. background: red;
  6. margin: 15px;
  7. padding: 10px;
  8. border: 5px solid green;
  9. display: inline-block;
  10. overflow: hidden;
  11. }
  12. .none { display: none; }
  13. .hidden { visibility: hidden; }
  14. .opacity0 { opacity: 0; }
  15. .height0 { height: 0; }
  16. </style>
  17. <div class="none"></div>
  18. <div class="hidden"></div>
  19. <div class="opacity0"></div>
  20. <div class="height0">aa</div>
  21. <script src="/Scripts/jquery-1.10.2.min.js"></script>
  22. <script>
  23. $(".none").on("click", function () {
  24. console.log("none clicked");
  25. })
  26. $(".hidden").on("click", function () {
  27. console.log("hidden clicked");
  28. })
  29. $(".opacity0").on("click", function () {
  30. console.log("opacity0 clicked");
  31. })
  32. $(".height0").on("click", function () {
  33. console.log("height0 clicked");
  34. })
  35. </script>

这段代码将四种 CSS 隐藏元素的方法分别展示出来,并且 JS 绑定其点击事件,经过微码盒测试,我们主要有下面的结论:

1、display:none:元素彻底消失,很显然不会触发其点击事件。

2、visibility:hidden:无法触发其点击事件,有一种说法是 display:none 是元素看不见摸不着,而 visibility:hidden 是看不见摸得着,这种说法是不准确的,设置元素的 visibility 后无法触发点击事件,说明这种方法元素也是消失了,只是依然占据着页面空间。

3、opacity:0:可以触发点击事件,原因也很简单,设置元素透明度为 0 后,元素只是相对于人眼不存在而已,对浏览器来说,它还是存在的,所以可以触发点击事件。

4、height:0:将元素的高度设置为 0,并且设置 overflow:hidden。使用这种方法来隐藏元素,是否可以触发事件要根据具体的情况来分析。如果元素设置了 border,padding 等属性不为 0,很显然,页面上还是能看到这个元素的,触发元素的点击事件完全没有问题。如果全部属性都设置为 0,很显然,这个元素相当于消失了,即无法触发点击事件。

但是这些结论真的准确吗?我们在上面的代码中添加这样一句代码:

  1. $(".none").click();

结果发现,触发了 click 事件,也就是通过 JS 可以触发被设置为 display:none 的元素的事件。所以前面无法触发点击事件的真正原因是鼠标无法真正接触到被设置成隐藏的元素!!!

上面介绍完了 CSS 元素隐藏后 JS 事件响应问题,下面补充下 CSS3 transition 动画对这几种方法的影响,CSS3 提供的 transition 极大地提高了网页动画的编写,但并不是每一种 CSS 属性都可以通过 transition 来进行动画的。我们修改代码如下:

  1. <style>
  2. div {
  3. width: 100px;
  4. height: 100px;
  5. background: red;
  6. margin: 15px;
  7. padding: 10px;
  8. border: 5px solid green;
  9. display: inline-block;
  10. overflow: hidden;
  11. transition: all linear 2s;
  12. }
  13. </style>
  14. <div class="none"></div>
  15. <div class="hidden"></div>
  16. <div class="opacity0"></div>
  17. <div class="height0">aa</div>
  18. <script src="/Scripts/jquery-1.10.2.min.js"></script>
  19. <script>
  20. $(".none").on("click", function () {
  21. console.log("none clicked");
  22. $(this).css("display", "none");
  23. })
  24. $(".hidden").on("click", function () {
  25. console.log("hidden clicked");
  26. $(this).css("visibility", "hidden");
  27. })
  28. $(".opacity0").on("click", function () {
  29. console.log("opacity0 clicked");
  30. $(this).css("opacity", 0);
  31. })
  32. $(".height0").on("click", function () {
  33. console.log("height0 clicked");
  34. $(this).css({
  35. "height": 0,
  36. });
  37. })
  38. </script>

经过微码盒认真测试,可以得到以下结论:

1、display:none:完全不受 transition 属性的影响,元素立即消失

2、visibility:hidden:元素消失的时间跟 transition 属性设置的时间一样,但是没有动画效果

3、opacity 和 height 等属性能够进行正常的动画效果

假设我们要通过 CSS3 来做一个淡出的动画效果,应该如下:

  1. fadeOut { visibility: visible; opacity: 1; transition: all linear 2s; }
  2. fadeOut:hover { visibility: hidden; opacity: 0; }

应该同时设置元素的 visibility 和 opacity 属性。本文总结说明了“隐藏”元素的几种方式,其中最常用的还是 display:none 和 visibility:hidden。其他的方式只能算是奇技淫巧,并不推荐使用它们来隐藏元素,它们的真正用途应该不在隐藏元素,而是通过了解这些方法的特点,挖掘出其真正的使用场景。

补充技巧

1、设置元素的 position 与 left,top,bottom,right 等,将元素移出至屏幕外

2、设置元素的 position 与 z-index,将 z-index 设置成尽量小的负数

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持微码盒!

给TA打赏
共{{data.count}}人
人已打赏
前端学习

利用animation动画实现呼吸灯效果

2024-8-23 15:02:10

前端学习

HTML 标签属性

2024-8-23 15:02:18

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索