悬停时颜色转灰度在 IE11 中不起作用

2023-11-24

我在用着Gray网站上的一些元素。但是,我无法让它在 IE11 中工作。例如,在下面的小提琴中,我使用 JS 添加grayscale and grayscale-fade类,以便图像在悬停时从彩色渐变为灰度。我如何让它在 IE11 中工作?作者说该插件需要针对 IE11 进行初始化(即$('article.project img').gray();),但如果我添加该行,所有图像从一开始就会默认变成灰色。我只是想让它在 IE11 中工作。有人可以告诉我怎么做吗?

Fiddle: http://jsfiddle.net/61jcam54/

HTML

<div id="content">
    <article class="project">
        <img width="375" height="375" src="http://i.imgur.com/jNkpAg6.gif" alt="image-title">
        <div class="overlay" style="margin-left: -1px; width: 367px;">
            <h3>Project Title</h3>
            <a class="post-link expand" href="http://google.com">+</a>
        </div>
    </article>
</div>

CSS

article.project {
  float: left;
  margin: 0 1% 2%;
  max-width: 375px;
  overflow: hidden;
  position: relative;
  -moz-user-select: none;
  -ms-user-select: none;
  -webkit-user-select: none;
}

article.project img {
  display: block;
  margin: 0;
  padding: 0;
  max-width: 100%;
  height: auto;
  -webkit-transition: all 0.2s ease;
  -moz-transition: all 0.2s ease;
  -o-transition: all 0.2s ease;
  -ms-transition: all 0.2s ease;
  transition: all 0.2s ease;
}

article.project .overlay {
  background: rgba(0, 0, 0, 0.8);
  bottom: 0;
  display: block;
  left: 0;
  opacity: 0;
  overflow: hidden;
  position: absolute;
  right: 0;
  top: 0;
  z-index: 1;
  -webkit-transition: all 0.2s;
  -moz-transition: all 0.2s;
  -o-transition: all 0.2s;
  transition: all 0.2s;
}

.hover .overlay, .active .overlay, .hover-sticky .overlay {
    opacity: 1;
}

article.project .overlay h3 {
  color: #FFF;
  font-size: 17px;
  font-size: 1.7rem;
  font-family: 'Montserrat',sans-serif;
  text-transform: uppercase;
  line-height: 1.3;
  margin-top: 3.3em;
  padding: 0 1em;
  position: absolute;
  text-align: center;
  top: 50%;
  width: 100%;
}

article.project .overlay .expand {
  border: 5px solid #FFF;
  bottom: 0;
  color: #FFF;
  display: block;
  font-size: 30px;
  height: 60px;
  left: 0;
  line-height: 50px;
  margin: auto;
  position: absolute;
  right: 0;
  text-align: center;
  top: 0;
  width: 60px;
  z-index: 2;
  -webkit-border-radius: 30px;
  -moz-border-radius: 30px;
  -ms-border-radius: 30px;
  -o-border-radius: 30px;
  border-radius: 30px;
}

/* GRAYSCALE */
.grayscale, .grayscale-sticky {
    /* Firefox 10+, Firefox on Android */
    filter: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><filter id='grayscale'><feColorMatrix type='matrix' values='0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0'/></filter></svg>#grayscale");

    /* IE 6-9 */
    filter: gray;

    /*
    Chrome 19+,
    Safari 6+,
    Safari 6+ iOS,
    Opera 15+
    */
    -webkit-filter: grayscale(100%);
}

.grayscale.grayscale-fade {
    -webkit-transition: -webkit-filter .2s;
}

.grayscale.grayscale-off,
article:hover .grayscale.grayscale-fade {
    -webkit-filter: grayscale(0%);
    filter: none;
}

.grayscale.grayscale-replaced {
    filter: none;
    -webkit-filter: none;
}

.grayscale.grayscale-replaced > svg {
    opacity: 1;
    -webkit-transition: opacity .2s ease;
    transition: opacity .2s ease;
}

.grayscale.grayscale-replaced.grayscale-off > svg,
article:hover .grayscale.grayscale-replaced.grayscale-fade > svg {
    opacity: 0;
}

JS

$('#content').on('mouseenter', 'article.project', function(){

    $(this).addClass('hover grayscale grayscale-fade');
    $(this).find('.post-link').hide();

}).on('mouseleave', 'article.project', function(){

    $(this).removeClass('hover grayscale grayscale-fade');
    $(this).find('.post-link').show();

});

TL;DR

这是一个更新后的示例可在 IE11 中运行以及所有其他支持的浏览器。


解释

有几个问题...

根据您正在使用的插件,当浏览器不支持 CSS3 过滤器(如 IE10/11)时,以下内容适用:

...该插件使用Modernizr._prefixes, css-filters, Inline SVG and svg-filters功能从 Modernizr 进行检测以确定浏览器支持。如果浏览器支持内联 SVG 和 SVG 过滤器,但不支持 CSS 过滤器,则插件会将元素替换为带过滤器的 SVG 元素。

自从imgIE11 中的元素需要替换为 SVG 元素,插件脚本(带有现代化shiv)需要它才能工作。在您提供的 jsFiddle 示例中,脚本jquery.gray.min.js实际上甚至没有在 IE11 中执行,因为它由于 mime 类型不匹配而被阻止(此警告位于控制台中)。

为了解决这个问题,我只需将脚本复制/粘贴到示例中。此外,值得注意的是,现代化文档说明该脚本must执行before the <body>负载。当使用 HTML5 Shiv 时,这似乎与 IE 相关:

我们建议将 Modernizr 放在头部的原因有两个:HTML5 Shiv(在 IE 中启用 HTML5 元素)必须在<body>,如果您正在使用 Modernizr 添加的任何 CSS 类,您将希望防止 FOUC。

现在脚本实际上是在 IE11 中执行的,需要初始化插件并img元素需要替换为 SVG。根据该插件,img如果元素具有类,元素将自动被替换.grayscale。或者,您似乎也可以使用自定义.gray()方法也。因为你的例子实际上并没有上课.grayscale to the img元素,它不会在 IE11 中被初始化。

下面,您会注意到我添加了课程.grayscale to the img元素(以便在 IE11 中初始化它)。此外,班级.grayscale-off也被添加到元素中,以便获得灰色效果off最初。在更新后的 jQuery 中,您将看到该类刚刚被切换。

以下是相关更新的 HTML/CSS/jQuery:

此处更新示例

我还稍微缩短了 jQuery:

$('#content').on('mouseenter mouseleave', 'article.project', function (e){
    $('.grayscale', this).toggleClass('hover grayscale-off');
    $(this).find('.post-link').toggle();
});
.grayscale.grayscale-replaced > svg {
    opacity: 0;
    -webkit-transition: opacity .2s ease;
    transition: opacity .2s ease;
}
.grayscale.grayscale-replaced.grayscale-off > svg {
    opacity: 1;
}
<div id="content">
    <article class="project">
        <img width="375" height="375" class="grayscale grayscale-off" src="http://lorempizza.com/380/240" alt="image-title" />
        <div class="overlay">
            <h3>Project Title</h3>
            <a class="post-link expand" href="...">+</a>
        </div>
    </article>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

悬停时颜色转灰度在 IE11 中不起作用 的相关文章

随机推荐

  • Node.js/Async - 如何避免异步回调地狱?

    我是后端 Node Js 和 JavaScript Web 开发的新手 我发现回调中的回调可能会很痛苦 并且有一些模块可以避免这种情况 这些模块之一是异步的 https github com caolan async 我已阅读文档 但很难开
  • 如何在解决方案资源管理器上保留源文件夹层次结构?

    我在Linux上做了一个C 项目 我将源文件分组在许多目录中以自己组织 我使用 CMake 进行编译 每个子目录上都有一个 CMakeFiles txt srcs folderA Toto cpp Tata cpp folderB Foo
  • htaccess重写库

    我的根目录中有两个目录 dev and live 这些目录中的所有内容都有相对路径 例如 css style css or js home js 我希望能够使用 htaccess 更改根目录 以便相对路径变为 live css style
  • 将字符串数组转换为打字稿中的对象键

    我有下一个数组 const arrayData a b as const 该数组有下一个类型 ArrayType a b 我想获得与下一个类型一致的对象 type Type a boolean b boolean 预期对象 const re
  • 在Python中异步播放声音

    我有一个while loop让我的相机 带有 opencv 在物体移动时拍照 我也想调用一个函数来播放声音 但是当我调用并播放它时 它将在该执行时间内停止循环 我试过ThreadPoolExecutor但不知道如何将它与我的代码混合 因为我
  • 使用 gettext() 将 settings.LANGUAGES 与正确翻译的名称一起使用

    来自 Django 文档 如果您定义了自定义LANGUAGES设置 标记语言就可以了 作为翻译字符串 如 上面显示的默认值 但是 使用 假人 gettext 函数 不 中的一个django utils translation 你永远不应该导
  • 结构体总是分配堆栈还是有时分配堆?

    我的印象是 在 C 中 结构元素是在堆栈上分配的 因此从创建它们的方法返回时会消失 但是如果我将结构值放入列表中并返回它会发生什么 元素得以幸存 结构体实例有时会分配在堆上吗 internal struct Stru public int
  • file_get_contents 是否使用缓存?

    我有一个函数可以生成一个包含数据库内容的表 有些单元格具有自定义 HTML 我通过模板系统使用 file get contents 读取这些 HTML 小内容是相同的 但此操作可能执行 15 次 我限制每页 15 个表行 那么file ge
  • Lollipop 设置默认本地不起作用

    我在大多数 Android API 版本上运行此方法来使用语言 字符串等 设置应用程序 protected void setDefaultLocale Context context Locale locale Locale setDefa
  • 仅锁定 ID

    我有一个方法需要专门运行一段代码 但我只想在确实需要时添加此限制 根据 Id 值 Int32 我将加载 修改不同的对象 因此锁定所有线程的访问没有意义 这是这样做的第一次尝试 private static readonly Concurre
  • 直接输入地址栏时,您必须使用 API 密钥来验证对 Google Maps Platform API 的每个请求

    我收到这样的错误 error message This API project is not authorized to use this API results status REQUEST DENIED 每当我运行这个 https ma
  • Web api 从处理程序内部获取路由模板

    在将问题放在这里之前 我进行了很多搜索 但搜索得越多 我就越感到困惑 所以我创建了一个处理程序 我试图获取这样的路线 public class ExecutionDelegatingHandler DelegatingHandler pro
  • 扩展模块中的类方法

    我正在研究 ruby 的元编程功能 我发现它有点棘手 我正在尝试使用模块包装方法调用 目前 我正在这样做 module Bar module ClassMethods def wrap method class eval do old me
  • 如何让 只接受图像文件?

    我只需要通过上传图像文件
  • Android:位图允许的最大宽度和高度

    我正在创建一个应用程序 需要将大图像解码为位图以显示在 ImageView 中 如果我只是尝试将它们直接解码为位图 我会收到以下错误 位图太大 无法上传到纹理中 1944x2592 最大 2048x2048 因此 为了能够显示太高分辨率的图
  • 将数组键从下划线大小写递归转换为驼峰大小写

    我必须想出一种方法将使用下划线 下划线大小写 的数组键转换为驼峰命名法 这必须递归完成 因为我不知道哪些数组将被输入到该方法中 我想出了这个 private function convertKeysToCamelCase apiRespon
  • 从C#到SQL Server的批量插入策略

    在我们当前的项目中 客户将向我们的系统发送复杂 嵌套消息的集合 这些消息的频率约为 1000 2000 条消息 每秒 这些复杂对象包含交易数据 待添加 以及主数据 如果找不到 将添加 但客户不传递主数据的 ID 而是传递 名称 列 系统检查
  • 在命令上设置 git 默认标志

    我想知道是否有办法为 git 命令默认设置标志 具体来说 我想设置 abbrev commit标志以便在执行时git log 我要执行git log abbrev commit 与问题不同 有没有办法为 git 命令默认设置一个标志 显然没
  • 如何使基本类型属性可选?

    我想在我的 JSONModel 类中创建一些原始属性选项 请参阅下面的代码 import JSONModel h protocol GreenModel
  • 悬停时颜色转灰度在 IE11 中不起作用

    我在用着Gray网站上的一些元素 但是 我无法让它在 IE11 中工作 例如 在下面的小提琴中 我使用 JS 添加grayscale and grayscale fade类 以便图像在悬停时从彩色渐变为灰度 我如何让它在 IE11 中工作