【问题标题】:$(document).ready or window.onload for hiding/showing a video$(document).ready 或 window.onload 用于隐藏/显示视频
【发布时间】:2016-02-05 14:54:08
【问题描述】:

我正在运行一个脚本(hack)来欺骗 Safari 在响应式页面上正确调整视频大小。下面的脚本等待片刻然后隐藏,然后显示一个视频,使 Safari 意识到它应该将视频扩展到适当的大小。

我担心$(document).ready 可能会过早地触发脚本(即在视频加载之前),从而导致脚本无法执行它应该对视频执行的操作。是否有可能使用$(document).ready 脚本可能会触发,但由于视频在设置的毫秒后未加载视频不会被隐藏/显示?

我应该使用window.onload(或其他方法吗?)来确保我的隐藏/显示大小调整技巧有效吗?

在我的测试中,脚本大部分都可以正常工作,即使在我清除缓存时重新加载也是如此。但是有几次,当我在随机计算机上加载页面时,在我重新加载页面之前,视频的大小不会正确。使用window.onload 似乎不太理想,因为用户可能会在页面内容加载时注意到大小不正确的视频,或者在它之后看到黑客在行动。

<script><!-- Super hack to toggle display block/none which tricks Safari into properly sizing video-->
    $(document).ready(function() {
    $("#video1").delay(3000).hide(0, function() {
        $("#video1").delay(3500).show();
        });  
        });
 </script>

【问题讨论】:

  • 我已经清理了你最初的声明。大块的单词可以让人们远离一个问题,所以我试图通过将它分成相关的段落来使其更易于管理(并添加了代码格式,这也提高了可读性)

标签: javascript html delay document-ready


【解决方案1】:

这是两个事件的区别:

  • window.onload 在所有内容(即媒体和样式表)加载后被触发。这是一个 DOM 事件

  • $(document).ready() 在 HTML 文档加载后触发(即最后一个结束标记已加载,媒体和样式表可能尚未加载)。这个事件在技术上是 jQuery 独有的,但是,如果 aailiabe,jQuery 实际上使用了DOMContentLoaded DOM 事件。

不过,jQuery 确实有一个仅在所有媒体加载后触发的事件 $(document).load(),但自 1.8 起已弃用此事件


如果您希望您的代码在视频加载之前运行,请使用$(document).ready()

如果您希望您的代码在视频加载后运行,请使用window.onload$(document).load()


回答您的评论:

前提是视频在延迟结束时已加载 (总数为7.5 seconds),您的破解将起作用。

即使视频没有加载,HTML 元素仍然存在,所以它 甚至可以在视频加载之前隐藏和显示(尽管我 不确定黑客是否仍然有效,这取决于如何以及何时 Safari 决定视频的大小)。

显然,如果视频尚未加载,隐藏和显示将不会 视觉上改变任何东西,因为元素是空的/没有内容。

【讨论】:

  • 谢谢@druzion。我知道使用 'window.onload' 我的 javascript 会运行,因为我的视频肯定会在那时加载,脚本的效果将应用于它。但是,使用 '$(document).ready()' 我知道我的脚本可能会在视频加载之前运行。那么这样做的结果是什么?这是否意味着我的显示/隐藏技巧仅在文档准备好时恰好加载视频的情况下才有效?或者,脚本会等到它引用的视频加载,然后才执行?我不确定基本规则能解决这个问题。
  • 如果视频在延迟后已加载(总计 7.5 seconds),您的 hack 将起作用。即使视频没有加载,HTML 元素仍然存在,因此它甚至可以在视频加载之前隐藏和显示。显然,如果它没有加载,隐藏和显示不会在视觉上改变任何东西,因为元素无论如何都是空的。
  • 您最后的评论正是我需要知道的。听起来我必须使用延迟更短的window.onload。奖励大约 7.5 秒的总时间。我没想到延误会一个接一个地发生。我假设它们都会从一开始就被触发(总共 3.5 秒)。再次感谢!
  • 如果回答了您的问题,请将其标记为已接受(按投票按钮下方的勾号)
猜你喜欢
  • 2011-04-11
  • 2012-06-16
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多