【问题标题】:Does jQuery fadeIn() automatically check if element is visible? | Coding EfficiencyjQuery fadeIn() 是否自动检查元素是否可见? |编码效率
【发布时间】:2021-10-28 04:16:48
【问题描述】:

我的网络应用程序有 jQuery 加载数据。作为一个网络应用程序,我所有的代码都被编译成一个文件。它经常被重复使用。文件大小和效率低下可能会严重降低我的网站性能和加载时间。

我的问题是:jQuery 是否有内置的冗余处理程序? 我的示例涉及 .fadeIn() 函数。我不希望 $('.search-output') 在每次按下某个键时都“淡入”,但是,我不想添加 jQuery 已经自行处理的不需要的代码。

我假设 jQuery 确实可以自己处理这些冗余,因为在没有我的“如果可见”语句的情况下运行它时不存在动画。不过,它可能会运行其他会减慢我的 Web 应用程序的代码。在我自己的处理程序中对所有内容进行编码还是让 jQuery 自己处理是更好/更有效的编码实践吗?

我知道我可以查看 jQuery 代码,但你们可能会得到比是或否更有价值的输入。

  $this.find('.search-input input').keyup(function() {
    if ($(this).val() == '') {
      $(this).parent().parent().parent().parent().find('.search-output').fadeOut(150)
    } else {
      if (!$(this).parent().parent().parent().parent().find('.search-output').is(':visible')) {
        $(this).parent().parent().parent().parent().find('.search-output').fadeIn(150)
      }
      formData.append('request', 'req_search_users')
      formData.append('searchString', $(this).val())
      xhr_request(formData, open)
      function open($status, $_rtn) {
        if ($status == 200) {
          $output = $this.find('.search-output')
          $_rtn = $_rtn.split('|,')
          if (parseInt($_rtn[0]) > 0) {
            $output.append($_rtn[1]).ready(function() {
              link_user_click($(this))
            })
          }
          if (parseInt($_rtn[0]) < 3) {
            $this.addClass('eof')
            $this.find('.auto-loader').hide();
          }
        } else {
          console.log('XHR POST: 404 Error')
        }
      }
    }
  })

这是我们正在查看的特定代码部分:

      if (!$(this).parent().parent().parent().parent().find('.search-output').is(':visible')) {
        $(this).parent().parent().parent().parent().find('.search-output').fadeIn(150)
      }

这是我的第一篇堆栈溢出帖子。感谢您提供的任何意见!

【问题讨论】:

  • 我发现 jQuery 的效率很高——jQuery 设计为在新旧浏览器上无需更改即可运行,因此无论如何速度都非常慢——话虽如此,您的代码可能会执行@ 987654323@ 在很多情况下两次(即如果满足条件) - 无论如何这都是低效的 - 如果 jQuery 已经处理了可见性测试,那么不要这样做
  • 谢谢!我想切换到纯 JS,但现在我的网站 90% 都在 jquery 上运行,而且我还不直观地了解纯 js。我正处于时间紧缩状态,否则我会投入更多时间来转换一切。如果将 $(this).parent().parent().parent().parent().find('.search-output') 分配给一个变量并调用该变量两次怎么办?
  • 当然,这更好-但您根本不需要检查可见性-我猜,无论如何,jQuery在内部与.is(':visible')相同,因此您的if是多余的,可能效率较低 - 不过,最终用户不会注意到这种低效率
  • 顺便说一下,首先要重写的是$.each 的任何使用...说真的,当我们将所有的都更改为forEach 或for 循环时,我们认为网站响应能力得到了很大改善我们一定是做错了什么,我们的网站不可能反应这么快

标签: javascript html jquery performance


【解决方案1】:

答案是肯定的。 jQuery 确实将 fade-in 动画应用于所有可见元素(CSS 属性 display 不等于 hidden 的元素)。所有动画可见性的jQuery方法都是&lt;collection&gt;.toggle()方法的“扩展”,它自动在hiddeninline状态之间切换,见https://api.jquery.com/toggle/

【讨论】:

  • does apply fade-in animation to all visible elements 你的意思是不可见?如果它已经可见,为什么要淡入可见元素-这是OP问题的症结
猜你喜欢
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 2021-02-19
  • 2012-07-08
  • 2013-11-09
  • 2017-04-25
  • 2022-01-07
相关资源
最近更新 更多