2016-04-09 123 views
1

我正在处理非常基本的图像编辑器,但无法获取范围输入滑块(#fx-slider)来影响实际的css过滤器值。这是代码:通过Javascript更改CSS过滤器值

function ChangeFilter() { 
 

 
    var ifx = document.getElementById("canvasFrame"); 
 
    var br = document.getElementById("br"); 
 
    var ct = document.getElementById("ct"); 
 
    var st = document.getElementById("saturate"); 
 

 
ifx.style.WebkitFilter = "brightness(" + br.value * 10 + "%)"); 
 
ifx.style.filter = "brightness(" + br.value * 10 + "%)"); 
 

 
ifx.style.WebkitFilter = "contrast(" + ct.value * 10 + "%)"); 
 
ifx.style.filter = "contrast(" + ct.value * 10 + "%)"); 
 

 
ifx.style.WebkitFilter = "saturate(" + st.value * 10 + "%)"); 
 
ifx.style.filter = "saturate(" + st.value * 10 + "%)"); 
 
}
#canvasFrame { 
 
    width:100px; 
 
    height:50px; 
 
    filter: brightness(100%) contrast(100%) saturate(100%); 
 
    -webkit-filter: brightness(100%) contrast(100%) saturate(100%); 
 
}
<div class="canvasFrame"> 
 
    <img src="http://www.joomlaworks.net/images/demos/galleries/abstract/7.jpg" alt="image"> 
 
</div> 
 
<div class="fx-slider"> 
 
    <label for="br">Brightness</label> 
 
    <input id="br" name="br" type="range" min="0" max="200" value="100" onchange="ChangeFilter()"> 
 
</div> 
 
<div class="fx-slider"> 
 
    <label for="ct">Contrast</label> 
 
    <input id="ct" name="ct" type="range" min="0" max="200" value="100" onchange="ChangeFilter()"> 
 
</div> 
 
<div class="fx-slider"> 
 
    <label for="st">Saturation</label> 
 
    <input id="st" name="ct" type="range" min="0" max="200" value="100" onchange="ChangeFilter()"> 
 
</div>

任何帮助,将不胜感激!谢谢。 :)

+1

你有几个基本的错字错误。元素有'class',但你使用'getElementById'。在设置样式的行中引号之后有一个额外的''''。 – Harry

+1

也是'webkitFilter'而不是'WebkitFilter' – Pointy

回答

0

您需要添加一个id到您的画布容器中,并且您使用错误的id来控制饱和度。另外,你应该连接3个控件,否则你只会设置饱和度。

function ChangeFilter() { 
    var ifx = document.getElementById("canvasFrame"); //need to update this id in you html 
    var br = document.getElementById("br"); 
    var ct = document.getElementById("ct"); 
    var st = document.getElementById("st"); //this id was wrong in your code 

    //set all 3 filter values at once. 
    ifx.style.webkitFilter = "brightness(" + br.value * 10 + "%) contrast(" + ct.value * 10 + "%) saturate(" + st.value * 10 + "%)"; 
    ifx.style.filter = "brightness(" + br.value * 10 + "%) contrast(" + ct.value * 10 + "%) saturate(" + st.value * 10 + "%)"; 
} 

CodePen:http://codepen.io/nobrien/pen/BKmevp

+0

哦,我猜你并不是真的想把你的过滤器乘以10,这样你的百分比从1000到2000%,但我离开它,因为它是你以前在做什么。 – NOBrien

+0

完美的作品!非常感谢。 :)当我创建我在这里发布的简化代码时,我不小心将过滤器值倍数放在那里。再次感谢。问题解决了。 – RoyNeary