jquery - 如何修复适用于 console.log() 但代码不正确的 jQuery 媒体查询
问题描述
我正在尝试根据屏幕宽度更改元素的背景图像,而我不能使用 CSS 的原因是因为图像路径是使用 PHP 拉入模板的。
我尝试了几种不同的 jQuery 媒体查询方法,我现在使用的方法确实有效,因为我在 console.log() 中添加了不同的消息并且这些消息正确显示。
当我用console.log()
更改图像的代码替换 时,它不起作用。
var image;
jQuery(window).resize(function() {
if (jQuery(window).width() <= 800) {
var image = '<?php the_field("mobile_header_background"); ?>';
var css = 'url(' + image + ') no-repeat center;';
jQuery('.homehead').css("background", css);
} else {
var image = '<?php the_field("header_background"); ?>';
var css = 'url(' + image + ') no-repeat center;';
jQuery('.homehead').css("background", css);
}
});
<div class="homehead" style="background: url() no-repeat center; background-size: cover;">
我希望 homehead div 的背景值会相应更新,但它只是不起作用。
编辑:
我刚刚尝试简化代码,消除对变量的需求并将图像路径直接输出到 .css 函数,但这也不起作用,尽管正确输出了图像路径。
jQuery(window).resize(function() {
if (jQuery(window).width() <= 800) {
jQuery(".homehead").css("background-image","url(<?php the_field('mobile_header_background'); ?>)");
} else {
jQuery(".homehead").css("background-image","url(<?php the_field('header_background'); ?>)");
}
});
<div class="homehead" style="background-image: url(); background-repeat: no-repeat; background-position: center; background-size: cover;">
解决方案
问题是 jQuery 忽略了 css 设置,因为它们不喜欢语法。如果您从 css 字符串的末尾删除分号,例如
var css = 'url(' + image + ') no-repeat center';
代替
var css = 'url(' + image + ') no-repeat center;';
它应该工作。
请记住,此代码只会在调整大小时运行。您可能还想在页面加载时运行它。我建议将代码移动到一个命名函数中并在加载时调用它,并将其传递给resize
处理程序。
推荐阅读
- javascript - 如何在浏览器中运行我自己的控制台?
- vba - 在条形图中为系列添加边框
- string - 修改 ROS2 IDL 中的最大字符串长度
- android - Android Studio 依赖冲突(程序类型已存在)
- rest - 为rocket.chat 用户准备IM 空间?
- javascript - 基于计数的 JavaScript 数组到字典对话
- laravel - 查询仅连接关系中的最后一行
- dart - 如何使用颤振删除 Firestore 文档中的字段
- konvajs - Konvajs:Transformer 处理程序随阶段扩展
- javascript - 在 IDEA 中为 Javascript 打印变量实时模板