javascript - 动态应用多个 css 过滤器

标签 javascript css css-filters

假设我想对图像应用一系列 CSS 滤镜。这是我的图片:

var img = document.getElementById("my_image.png");

这里是 <input type="range">应用过滤器的 slider :

var slider1 = document.getElementById("slider1");
var slider2 = document.getElementById("slider2");

我为每个添加一个事件监听器:

slider1.addEventListener("input", function(){
    img.style.filter = ( "sepia(" + this.value + ")" );
});
slider2.addEventListener("input", function(){
    img.style.filter = ( "blur(" + this.value + "px)" );
});

当我移动第二个 slider 时,它将删除第一个 slider 的过滤器属性。但是如果我 +=过滤器属性,它将添加到 img.style.filter串起 slider 的每一步。如果我使用“更改”事件监听器,用户将无法享受滤镜效果的实时“预览”。 (如果用户第二次返回 slider ,将导致错误的 img.style.filter 属性)。

那么只更新 img.style.filter 的相关部分的最佳 javascript-only(无 jquery)方式是什么?在保持实时渲染效果的同时操作相关 slider 时的属性?

最佳答案

给你。 https://jsfiddle.net/2p8kwjv1/1/

显然,如果您需要多个过滤器,则必须在同一个过滤器定义中定义它们。像这样

img{
    filter: blur(50px) sepia(50%);
    -webkit-filter: blur(50px) sepia(50%);
}

因此,要在 javascript 中实现这一点,您必须保留对这些值的引用。然后每次更改棕褐色时,您还可以应用当前模糊值以动态地同时显示两个滤镜。

var sepia = slider1.value;
var blur = slider2.value;

slider1.addEventListener("input", function(){
    sepia = this.value;
    img.style["-webkit-filter"] = "blur("+blur+"px) sepia(" + this.value + "%)";
});
slider2.addEventListener("input", function(){
    blur = this.value;
    img.style["-webkit-filter"] = "blur(" + this.value + "px) sepia("+sepia+"%)" ;
});

关于javascript - 动态应用多个 css 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33922218/

相关文章:

javascript - require() 在 node.js 中需要相同模块时如何工作

html - 如何在不弄乱整个内容的情况下将小图标插入背景 url Logo 的一侧?

CSS - 具有覆盖/背景模糊对 Angular 线的图像

javascript - 键数组,在 json 对象中查找值

用于更改值的 Javascript 浏览器脚本

css - 如何避免在悬停时展开父级 Flex 元素

html - 即使 parent 是相对的,也不能定位绝对 Div

html - 使用 CSS 使文本框背景模糊

css - 如何将 CSS 滤镜应用于背景图像

php - 如何自动创建页面?