2016-04-09 3 views
1

Я работаю над очень простым графическим редактором, но я не могу получить ползунки ввода диапазона (# fx-slider), чтобы повлиять на фактические значения фильтра css. Это код:Изменение значений CSS-фильтра с помощью Javascript

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

Вам нужно добавить идентификатор в контейнер для холста, и вы используете неправильный идентификатор для вашего контроля насыщенности. Кроме того, вы должны конкатенировать 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

Смежные вопросы