【问题标题】:preload random background image预加载随机背景图片
【发布时间】:2019-05-24 18:29:55
【问题描述】:

我在 http2/apache/php7.3 环境中有一个以 divi 为主题的 wordpress 网站。我不擅长jquery。我已将背景放入生成以下标记的部分中

    <section id="random-clip" class="et_pb_module et_pb_fullwidth_header 
    et_pb_fullwidth_header_0 et_hover_enabled 
    et_pb_section_video et_pb_bg_layout_light et_pb_text_align_center" 
    style="background-image: url("/wp-content/uploads/media/fallback1.jpg"); 
    background-position-y: 35%;">...
    </section>

现在我想随机化这个背景,我使用下面的 jQuery 完成了这个,它放在关闭 body 标签之前。

 <script>
    //random background
    jQuery(document).ready(function($){
      var background = new Array ();
      background[0] = "/fallback1.jpg";
      background[1] = "/fallback2.jpg";
      background[2] = "/fallback3.jpg";
      var randombackground = Math.floor(Math.random() * background.length); 
      $("#random-clip.et_pb_fullwidth_header.et_pb_fullwidth_header_0").css({
'background-image': 'url(/wp-content/uploads/media' +background[randombackground] + ')',
    'background-position-y': '35%' });
    });
 </script>

这按预期工作,但我想稍微提高一下这个脚本的速度,因为由于某种原因,图像在文档加载后被调用并且没有准备好(可能是由于 cahin/defering/minification 插件),这使得在瀑布的尽头下载这些图像。由于我有一个隐藏加载的预加载器/微调器,这个随机脚本使微调器旋转超过需要..对此有什么建议吗?考虑到我在 http2 中,我正在考虑类似推送预加载的东西。 非常感谢

【问题讨论】:

  • 不要在jQuery(document).ready 中运行该代码,而是在&lt;section id="random-clip"&gt;&lt;/section&gt; 之后立即运行它。看看能不能解决。否则你将不得不在你的 PHP 中随机化 url(这可能是一个更好的选择)
  • 我已经尝试了下一部分,没有任何变化。我已经在 php 和 mysql 中尝试过这个,你可以在这里查看stackoverflow.com/questions/56240442/… 我是如何通过 mysql 查询尝试的,但不幸的是,如果缓存我的页面,这将不起作用。
  • 您应该检查是否有任何钩子可用于覆盖任何 divi 主题部分。或检查是否有任何 html/代码块可用于从后端插入代码。

标签: javascript jquery wordpress


【解决方案1】:

您正在准备编写客户端脚本。当 DOM(文档对象模型)被加载时,ready 事件发生。为避免任何延迟,您应该编写服务器端代码以在后台显示随机图像。

创建包含所有可能背景图像的数组。

$backgroundsArray = array('fallback1.jpg','fallback2.jpg','fallback3.jpg');   
echo '<pre>';var_dump($backgroundsArray);exit;

如果你 var_dumb 当前数组,那么你将看到以下输出。

array (size=3)
  0 => string 'fallback1.jpg' (length=13)
  1 => string 'fallback2.jpg' (length=13)
  2 => string 'fallback3.jpg' (length=13)

选择 0 到 2 之间的随机数

$RandomNumber = rand(0,2);
//$RandomNumeber will return value from 0 to 2.    
$BackgroundImage = $backgroundsArray[$RandomNumber];

<section id="random-clip" style="background-image: url("/wp-content/uploads/media/".$BackgroundImage .""); background-position-y: 35%;">


</section>

【讨论】:

  • 正如我所说,这个网站是用 divi 主题构建的,所以该特定部分的标记是由主题生成的。我过去在服务器端尝试过的是stackoverflow.com/questions/56240442/…,这是一个通过 mysql 查询随机化后台 url 到帖子内容的函数。这是可行的,但不幸的是,如果我正在缓存页面,则在我清除缓存之前背景不会随机化。
  • 我还没有在 divi 主题中工作过,你应该继续使用你的方法,而不是添加预加载器检查是否有办法在上面返回默认背景图像
    这最初看起来很尴尬.
猜你喜欢
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多