[英]HTML Range element to change CSS image filter with JavaScript
I am trying to use JavaScript to change an image's CSS filter when a user selects a new value on a range element. 当用户在范围元素上选择新值时,我正在尝试使用JavaScript来更改图像的CSS过滤器。 My HTML does not seem to work though. 我的HTML似乎不起作用。 Here are my CSS image styles: 这是我的CSS图像样式:
<!DOCTYPE html>
<html>
<head> <style>
img {-webkit-filter: grayscale(100%); filter: grayscale(100%);}
</style> </head>
Here are my image and range elements : 这是我的图像和范围元素:
<body>
<img src="pineapple.jpg" id="Image" alt="Pineapple" width="300"
height="300">
<form>
Photo Filter:
<input type="range" id="Filter" name="points" min="0" max="10"
onclick="ChangeFilter()">
</form>
Here is my JavaScript function to change the CSS image style: 这是我改变CSS图像样式的JavaScript函数:
<script>
function ChangeFilter() {
Image = document.getElementById("Image").style.filter;
Filter = document.getElementById("Filter").value;
if (Filter == 1) {Image = grayscale(10%);}
if (Filter == 2) {Image = grayscale(20%);}
if (Filter == 3) {Image = grayscale(30%);}
if (Filter == 4) {Image = grayscale(40%);}
if (Filter == 5) {Image = grayscale(50%);}
if (Filter == 6) {Image = grayscale(60%);}
if (Filter == 7) {Image = grayscale(70%);}
if (Filter == 8) {Image = grayscale(80%);}
if (Filter == 9) {Image = grayscale(90%);}
if (Filter == 10) {Image = grayscale(100%);}
}
</script>
</body>
</html>
But when I select a new value on the range element, the image's style properties just won't respond. 但是当我在range元素上选择一个新值时,图像的样式属性就不会响应。 Help Please! 请帮助! Many Thanks :) 非常感谢 :)
You can find a working fiddle here . 你可以在这里找到一个工作小提琴 。
There were a few problems in your code: 您的代码中存在一些问题:
1) First of all, you should use the onchange
event instead of the onclick
event. 1)首先,您应该使用onchange
事件而不是onclick
事件。 Or you can use oninput
event as well. 或者您也可以使用oninput
事件。
2) The correct way of assigning new value of the filter to an Image object is Image.style.WebkitFilter="grayscale(10%)";
2)将过滤器的新值分配给Image对象的正确方法是Image.style.WebkitFilter="grayscale(10%)";
. 。
JavaScript: JavaScript的:
function ChangeFilter() {
Image = document.getElementById("Image");
Filter = document.getElementById("Filter").value;
Image.style.WebkitFilter = "grayscale(" + Filter * 10 + "%)"
}
CSS CSS
img {-webkit-filter: grayscale(100%); filter: grayscale(100%);}
HTML HTML
<img src="https://upload.wikimedia.org/wikipedia/commons/f/fd/Pink_flower.jpg" id="Image" alt="Pineapple" width="300" height="300">
<form>
Photo Filter:
<input type="range" id="Filter" name="points" min="0" max="10" onchange="ChangeFilter()" />
</form>
Change onclick
event to onchange
in html and in javascript do this: 在html和javascript中将onclick
事件更改为onchange
,执行以下操作:
<script>
var image = document.getElementById("Image");
var range = document.getElementById("Filter");
function ChangeFilter() {
image.style.WebkitFilter = "grayscale(" + range.value*10 + "%)");
image.style.filter = "grayscale(" + range.value*10 + "%)");
}
</script>
You need to wrap the grayscale value as a string. 您需要将灰度值包装为字符串。
I have simplified the code for you by using times, instead of ifs. 我使用times而不是ifs简化了代码。
Also, you needed to set -webkit-filter
and if you are starting at 100%, set the value
to 10 to start with. 此外,您需要设置-webkit-filter
,如果您从100%开始,请将value
设置为10以开始。
img { -webkit-filter: grayscale(100%); filter: grayscale(100%); }
<img src="http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon@2.png" id="Image" alt="Pineapple" width="300" height="300"> <form> Photo Filter: <input type="range" id="Filter" name="points" min="0" max="10" onchange="ChangeFilter()" value="10"> </form> <script> function ChangeFilter() { var filter = document.getElementById("Filter").value; var greyScale = 'grayscale(' + (filter * 10) + '%)'; document.getElementById("Image").style['-webkit-filter'] = greyScale; document.getElementById("Image").style.filter = greyScale; } </script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.