jquery - 根据背景更改图像颜色

标签 jquery css html5-canvas jquery-svg

我需要为我的元素创建一个图像对象,当它位于另一个特定元素前面时会改变颜色,并且仍然允许我移动它,以便我的布局保持流畅。如果我需要不同颜色的图像文件也没问题。任何人都可以告诉我这项技术是否有名称,或者指出我如何实现这一目标的方向。

这是一个效果应该如何工作的例子

http://imgur.com/Vvrr6W4

我正在考虑将两个图像封装在一个对象中,并为其中一个图像使用 CSS 掩码,我将尝试将其与背景对象放在同一位置,但到目前为止我还没有值得发布的东西代码片段。

canvas 元素是否可以用于实现此目的,我对这个元素完全没有经验,所以我什至不知道它是否值得研究。

提前致谢


为了完整性,这里是我最终使用的解决方案,灵感来自@ctwheels ( his solution )。它使用一个带有更改颜色的背景图像的蒙版对象,该对象使用 background-position 属性进行定位

JSFiddle

<body>
    <div id="container">
        <div id="myImg"></div>
        <div id="myImg2"></div>
        <div id="myDiv"></div>
    </div>
</body>

#container {
    position:relative;
}
#myImg {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 210px;
    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="220" height="210"><polygon id="triangle" points="100,10 40,198 190,78 10,78 160,198" stroke="%230038b8" stroke-width="0" fill-opacity="1" style="fill: green" /></svg>');
    background-repeat: no-repeat;
}
#myDiv {
    position:absolute;
    top:50px;
    left:0px;
    height: 50px;
    width: 200px;
    background-color:red;
}
#myImg2 {
    position: absolute;
    top: 50px;
    width: 500px;
    height: 50px;
    z-index: 1;
    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="220" height="210"><polygon id="triangle" points="100,10 40,198 190,78 10,78 160,198" stroke="%230038b8" stroke-width="0" fill-opacity="1" style="fill: gray" /></svg>');
    background-repeat: no-repeat;
    background-position: 0px -50px;
}

最佳答案

在这里,我创建了一个 fiddle

http://jsfiddle.net/ctwheels/h1y6xxf4/2/

HTML

<body>
    <div id="container">
        <div id="myImg">
            <svg height="210" width="500">
                <polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:grey;fill-rule:nonzero;" />Sorry, your browser does not support inline SVG.</svg>
        </div>
        <div id="myDiv"><svg height="210" width="500">
                <polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:rgba(255, 255, 255, 0.5);fill-rule:nonzero;" />Sorry, your browser does not support inline SVG.</svg></div>
    </div>
</body>

CSS

#container {
    position:relative;
}

#myDiv {
    position:absolute;
    top:0px;
    left:0px;
    background-color:red;
    clip:rect(50px, 200px, 100px, 0px);
}

我只是将图像从第一个 div 复制到第二个 div 并更改了背景颜色。第二个 div 在 position:relative; div

中有 position:absolute;

关于jquery - 根据背景更改图像颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384858/

相关文章:

javascript - 背景行为奇怪的 html5 Canvas

html5-canvas - 在 Electron 中将 OffscreenCanvas 内容以 PNG 格式保存到磁盘

jQuery - 侧边栏滑入,并保持窗口宽度

jquery - 谷歌地图标记奇怪地拉伸(stretch)问题

javascript - 单击重新加载脚本

javascript - 知道点击了哪个用户创建的 div

css - 更正 <sup> 和 <sub> 行高

javascript - 使用 HTML5 和 JavaScript 从视频中捕获帧

html - 通过 CSS 巧妙地对相似的元素进行分组

javascript - 使动画变慢(jQuery)