Javascript 在所有浏览器中动态更改渐变颜色

Javascript 在所有浏览器中动态更改渐变颜色,javascript,css,Javascript,Css,我想创建一个脚本,用户可以通过在两个不同的文本字段中输入颜色代码来设置div的渐变 这是我的代码: <style> #gradient { background: #0A284B; background: -webkit-gradient(linear, left top, left bottom, from(#0A284B), to(#135887)); background: -webkit-linear-g

我想创建一个脚本,用户可以通过在两个不同的文本字段中输入颜色代码来设置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>

#梯度{
背景:#0A284B;
背景:-webkit渐变(线性、左上、左下、从(#0A284B)到(#135887));
背景:-webkit线性梯度(#0A284B,35887);
背景:-莫兹线性梯度(顶部,#0A284B,#135887);
背景:-ms线性梯度(#0A284B,#135887);
背景:-o-线性梯度(#0A284B,#135887);
背景:线性梯度(#0A284B,#135887);
过滤器:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0A284B',endColorstr='#135887');
缩放:1;}
函数myFunction()
{
color1=document.getElementById(“color1”).value;
color2=document.getElementById(“color2”).value;
document.getElementById(“渐变”).style.background=“-webkit渐变(线性、左上、左下、从(“+color1+”)到(“+color2+”)”);
document.getElementById(“gradient”).style.background=“-webkit线性渐变”(“+color1+”,“+color2+”);
document.getElementById(“渐变”).style.background=“-moz线性渐变(顶部,“+color1+”,“+color2+”)”;
document.getElementById(“渐变”).style.background=“-ms线性渐变”(“+color1+”,“+color2+”);
document.getElementById(“gradient”).style.background=“-o-linear-gradient”(“+color1+”,“+color2+”)”;
document.getElementById(“梯度”).style.background=“线性梯度”(“+color1+”,“+color2+”)”;
document.getElementById(“gradient”).style.filter=“progid:DXImageTransform.Microsoft.Alpha(startColorstr=”+color1+”,endColorstr=”+color2+”)”;
}
我有梯度
该功能在Firefox和IE10中运行良好,但在较旧的IE版本中不起作用。 我猜这是因为最后一次后台调用覆盖了旧IE版本的其他调用

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

您可能想看看这个函数

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

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+"')"
并且,根据,确保设置
溢出:auto
或设置对象的高度


编辑#2

您是对的,它将与其他属性断开(CSS中的with不影响它)

然后检查是否为IE,并使用以下JS:

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

谢谢,我会添加它,但是渐变本身工作得很好,它只是我的更改函数,在旧版本中不起作用。什么?你有javascript错误吗?只需将“过滤器”部分也添加到javascript中,而不仅仅是添加到CSS中,您就会发现它不起作用。我试过你的额外js线路,但运气不好。在旧版IE中不会发生任何事情。我在IE8中使用最新的javascript对其进行了测试:|