在 jQuery 中设置背景渐变的 -os-/-ms 前缀失败?

2023-12-11

我在这里看到了一些关于 jQuery 的其他帖子.css()不与-webkit-gradient,但是我还没有找到一个与-ms-linear-gradient, -o-linear-gradient and linear-gradient.

长话短说,我创建了一个函数来设置#hex基于元素的背景渐变,使用所有最流行的 CSS 属性来实现跨浏览器兼容性,直接取自彩色齐拉.

看一下我正在谈论的特定片段:

$(elem).css({
        'background': b,
        'background': '-moz-linear-gradient(top,  '+a+' 0%, '+b+' 100%)', 
        'background': '-webkit-gradient(linear, left top, left bottom, color-stop(0%,'+a+'), color-stop(100%,'+b+'))',
        'background': '-webkit-linear-gradient(top,  '+a+' 0%,'+b+' 100%)',
        'background': '-o-linear-gradient(top,  '+a+' 0%,'+b+' 100%)', // Breaks execution
        'background': '-ms-linear-gradient(top,  '+a+' 0%,'+b+' 100%)', // Breaks execution
        'background': 'linear-gradient(top,  '+a+' 0%,'+b+' 100%)', // Breaks execution
        'filter': 'progid:DXImageTransform.Microsoft.gradient( startColorstr=\''+a+'\', endColorstr=\''+b+'\',GradientType=0 )'
        });

我已经放置了一个//breaks execution每个属性旁边的注释在活动时(集体或单独)会中断脚本的执行(没有其他属性,例如background: b (b当然是一个变量)被设置。

我完全不明白为什么会这样。

到目前为止我已经尝试过:

  • 使用双引号代替单引号。
  • 替换变量用法(+a+, +b+)与实际的十六进制。

我在想也许这三个角色中有一个需要逃脱或者什么?

任何有助于找出原因的帮助将不胜感激!


您正在设置并重新设置backgroundJavaScript 对象的属性一次又一次。

最后,如果您尝试记录要传递给的对象.css(),你会看到它只包含 2 个属性:最后一个background列表中的值,以及filter.

所以你的代码相当于:

$(elem).css({
    'background': 'linear-gradient(top,  '+a+' 0%,'+b+' 100%)',
    'filter': 'progid:DXImageTransform.Microsoft.gradient( startColorstr=\''+a+'\', endColorstr=\''+b+'\',GradientType=0 )'
});

你可以尝试这样的事情(jsfiddle 演示):

var i, l, backgrounds = [
    '-moz-linear-gradient(top,  '+a+' 0%, '+b+' 100%)', 
    '-webkit-gradient(linear, left top, left bottom, color-stop(0%,'+a+'), color-stop(100%,'+b+'))',
    '-webkit-linear-gradient(top,  '+a+' 0%,'+b+' 100%)',
    '-o-linear-gradient(top,  '+a+' 0%,'+b+' 100%)',
    '-ms-linear-gradient(top,  '+a+' 0%,'+b+' 100%)',
    'linear-gradient(top,  '+a+' 0%,'+b+' 100%)'
];

// Try each background declaration, one at a time
// Like in a stylesheet, the browser should(!) ignore those
// it doesn't understand.
for( i = 0, l = backgrounds.length ; i < l ; i++ ) {
    $(elem).css({ background: backgrounds[i] });
}

$(elem).css({
    'filter': "progid:DXImageTransform.Microsoft.gradient( startColorstr='"+a+"', endColorstr='"+b+"',GradientType=0 )"
});

这段代码当然效率不高。对于理解多个声明的浏览器,它将毫无意义地覆盖那些已经起作用的声明。因此,请根据您认为合适的方式进行优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 jQuery 中设置背景渐变的 -os-/-ms 前缀失败? 的相关文章

随机推荐

  • 在 Linux 上使用 fgets() 读取带有 DOS 行结尾的文件

    我有一个在运行时收到的带有 DOS 行结尾的文件 因此我无法将行结尾转换为 UNIX 样式脱机 另外 我的应用程序可以在 Windows 和 Linux 上运行 我的应用程序做了一个fgets 文件并尝试逐行读取 Linux 上每行读取的字
  • Oracle 中的外键约束问题

    在 Oracle 9i 中声明 FK 时遇到问题 我在 SO 和一些在线文档中查看了许多示例 例如http www techonthenet com oracle foreign keys foreign delete php 没有任何真正
  • 如何找出ClearCase视图加载的文件在哪里?

    我们使用 ClearCase UCM 和 base 我们面临的悬而未决的问题之一是 如何通过给定的视图存储目录路径找出快照视图的加载文件所在的位置 例如我们的景观位于C views myview vws 有时 等效加载的文件位于C view
  • ZF2 + Doctrine2:服务器已消失 - 如何启动旧连接?

    在此先感谢您的帮助 我想知道是否有人很快知道在实体存储库死机时要调用哪些函数来重新连接 我正在通过 ZF2 CLI 路由运行一些作业 这些作业可能需要超过 wait timeout 的时间 不幸的是 ER 的连接在需要使用时 作业完成时 就
  • UILocalNotification重复声音

    我使用了此页面中苹果示例的代码 Link 但我似乎无法让声音重复 我检查了其他应用程序 例如 Skype 用于 VOIP 和 Alarm Clock Pro 音频 但我无法重复播放声音文件 这是我的代码 void applicationDi
  • Windll ctypes 从 python 2.7 调用可变参数 c 函数在 win64 中有效,但在 win32 中无效

    我在 Windows 10 32 和 Windows 10 64 上使用 Python 2 7 我正在为 C 编译的 stdcall Windows DLL mydll 编写一个 python 包装器 我有 2 个版本的 DLL 32 位和
  • 是否可以使 wget 的进度条适应多个文件?

    我通过执行或多或少的操作来下载某些目录的所有 htm 文件 wget http some url r accept htm nv show progress 其中我关闭了 wget 的打印 但保留了进度条 这对我的情况很有用 nv show
  • C++/CLI - 如何打开新表单并返回

    我正在创建一个应用程序 其中前端必须是使用 C CLI 的 Windows 窗体 该表格用于登录目的 在我的表单中 我有一个注册按钮 单击此按钮后 应打开一个新表单 关闭登录表单 我能够通过以下代码实现这一目标 Form rgForm gc
  • C++ 对命名空间中函数的未定义引用

    这已经困扰我一段时间了 我有一个命名空间 在该命名空间中我想声明 C 风格的函数 所以我做了我认为正确的事情 namespace test std deque
  • javaFX:MediaPlayer的seek方法挂起播放器,没有错误消息或状态更改

    我有一个带有 8 个媒体播放器的程序 它们像一个大视频一样通过一组控件进行控制 我有一个滑块来控制时间 也就是我调用所有 MediaPlayerseek中的方法onMouseReleased滑块的 我的问题是 媒体播放器一直挂起 没有改变其
  • JTable 的单元格渲染器 - 彩色行

    我一直在寻找解决方案 但在不问我自己的问题的情况下 我无法从各个地方了解如何让我的桌子进行彩色行 从我看过的每个地方我收集到我需要使用单元格渲染器 但问题是我不知道如何将其应用到我自己的情况 因此 我有一个包含 3 列的简单 JTable
  • 在哪里可以找到 Java 平方根函数的源代码? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我知道Math sqrt来电StrictMath sqrt double a 方法签名在StrictMath班级 public static nat
  • 处理中几何着色器的意外行为

    我在处理中使用简单的几何着色器 shader shader beginShape vertex 0 1 0 1 vertex 0 0 0 0 vertex 0 001 0 02 endShape 所以我在三角形上应用着色器 我们首先有一个不
  • Android 权限:电话:读取手机状态和身份

    我的 Android 应用程序与电话无关 但我发现当我在测试设备上安装调试版本时 它需要 电话 读取电话状态和身份 权限 我在AndroidManifest xml 我想拥有尽可能小的权限 想知道是否有人知道如何摆脱这个 我注释掉了我记录一
  • Microsoft.ACE.OLEDB.12.0 提供程序未注册

    我的申请是写在C 和用途Ms Access 2003我希望它能够正常运行64 bitWindows 安装 我使用数据提供者作为ACE OLEDB 12 连接字符串中的 0 但它仍然给出异常Microsoft ACE OLEDB 12 0尽管
  • android的TabHost应用程序中的ProgressDialog

    我想在我的应用程序中使用进度对话框 我在执行此操作时遇到一个问题 经过一番研究后 我发现不太可能创建进度对话框 我在应用程序中具有 TabHost 的活动组类 我有完全相同的场景 我的应用程序中有 TabHost 以及具有 TabHost
  • 将 Glassfish 集成到 Eclipse for Java EE

    我正在使用 Eclipse for Java EE 我已经安装了包含 Glassfish 服务器的 Java EE SDK 但在创建 Web 项目时 我在服务器列表中没有看到 Glassfish 如何将 Glassfish 添加到 Ecli
  • Octokit.js 无法与 Vite 配合使用。模块外部化,无法在客户端模式下访问

    我在做什么 我正在将 Vite 用于我的 React 应用程序 我正在导入 Octokit 并像这样绑定它 import Octokit from octokit const githubToken import meta env REAC
  • Android:FileProvider“找不到配置的根目录”

    我正在尝试使用 FileProvider 通过电子邮件共享 SQL 数据库文件 Error java lang IllegalArgumentException Failed to find configured root that con
  • 在 jQuery 中设置背景渐变的 -os-/-ms 前缀失败?

    我在这里看到了一些关于 jQuery 的其他帖子 css 不与 webkit gradient 但是我还没有找到一个与 ms linear gradient o linear gradient and linear gradient 长话短