gpt4 book ai didi

javascript - 所有浏览器中渐变颜色的动态变化

转载 作者:行者123 更新时间:2023-11-30 06:36:00 25 4
gpt4 key购买 nike

我想创建一个脚本,用户可以在其中通过在两个不同的文本字段中输入颜色代码来设置 div 的渐变。

这是我的代码:

        <style>
#gradient {
background: #0A284B;
background: -webkit-gradient(linear, left top, left bottom, from(#0A284B), to(#135887));
background: -webkit-linear-gradient(#0A284B, #135887);
background: -moz-linear-gradient(top, #0A284B, #135887);
background: -ms-linear-gradient(#0A284B, #135887);
background: -o-linear-gradient(#0A284B, #135887);
background: linear-gradient(#0A284B, #135887);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0A284B', endColorstr='#135887');
zoom: 1; }
</style>


<script>

function myFunction()
{
color1 = document.getElementById("color1").value;
color2 = document.getElementById("color2").value;

document.getElementById("gradient").style.background="-webkit-gradient(linear, left top, left bottom, from("+color1+"), to("+color2+"))";
document.getElementById("gradient").style.background="-webkit-linear-gradient("+color1+", "+color2+")";
document.getElementById("gradient").style.background="-moz-linear-gradient(top, "+color1+", "+color2+")";
document.getElementById("gradient").style.background="-ms-linear-gradient("+color1+", "+color2+")";
document.getElementById("gradient").style.background="-o-linear-gradient("+color1+", "+color2+")";
document.getElementById("gradient").style.background="linear-gradient("+color1+", "+color2+")";
document.getElementById("gradient").style.filter="progid:DXImageTransform.Microsoft.Alpha(startColorstr='"+color1+"', endColorstr='"+color2+"')";

}
</script>

<input type="text" id="color1" onkeyup="myFunction()" value="#E9EDF6"></input>
<input type="text" id="color2" onkeyup="myFunction()" value="#AABBDD"></input>

<div id="gradient" style="height:500px">
I have gradient
</div>

该功能在 Firefox 和 IE10 中工作正常,但在旧版本的 IE 中无效。我猜这是因为最后一个后台调用覆盖了其他适用于旧版 IE 的调用。

那么你会怎么做呢?我是否应该创建一个函数,在调用颜色更改函数之前首先检查使用的浏览器?

最佳答案

您可能想看看惊人的 Ultimate CSS Gradient Generator .

如您所见,它生成的代码比您所做的要多,每行末尾的注释指示哪些浏览器受该行影响:

background: #1e5799; /* Old browsers */
background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* IE10+ */
background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); /* IE6-9 */

具体来说,最后一行是你需要的,用于IE6-IE9。

对于不处理渐变的旧浏览器 (IE5.5...),您可能还想包含第一行。


编辑

在其他行之后,也在 javascript 中添加过滤器部分:

document.getElementById("gradient").style.filter = 
"progid:DXImageTransform.Microsoft.Alpha(startColorstr='"+
color1+"', endColorstr='"+color2+"')"

并且,根据 this answer , 请务必设置 overflow: auto 或为您的对象设置高度。


编辑 #2

你是对的,它会破坏其他属性(在 CSS 中不影响它)。

然后判断是不是IE,使用这个JS:

document.getElementById("gradient").filters.item("DXImageTransform.Microsoft.gradient").startColorstr = color1;
document.getElementById("gradient").filters.item("DXImageTransform.Microsoft.gradient").endColorstr = color2;

关于javascript - 所有浏览器中渐变颜色的动态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14456643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com