jQuery相当于css选择器进度:: - webkit-progress-value

时间:2013-04-17 07:39:12

标签: javascript jquery selector css-transitions progress

我需要调整HTML5 <progress>的过渡时间 - 使用JS(jQuery)吧,但我无法在jQuery中找到正确的选择器。

我目前的尝试:

CSS

progress::-webkit-progress-value {
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
    -o-transition: all 0.5s;
    -ms-transition: all 0.5s;
    transition: all 0.5s; /* Works like a charm */
}

JavaScript(没有成功):

// These lines do nothing when the progress value changes:
$(".progressSelectorClass[progress-value]").css({"-webkit-transition" : "all 6s"}); 
$(".progressSelectorClass > *").css({"-webkit-transition" : "all 6s"}); 
$(".progressSelectorClass").css({"-webkit-transition" : "all 6s"});

// This gets an error:
$(".progressSelectorClass::-webkit-progress-value").css({"-webkit-transition" : "all 6s"});

有没有机会在JavaScript中选择progress::-webkit-progress-value(有或没有jQuery)?

在这个jsFiddle中你会更清楚地看到我尝试做的事情: http://jsfiddle.net/rD5Mc/1/

更新

通过向data-animation-time - 元素添加/更改<progress>参数并创建了几个这样的css类,我得到了一个丑陋的解决方法:

progress[data-animation-time="5"]::-webkit-progress-value { -webkit-transition: all 5s; }
progress[data-animation-time="10"]::-webkit-progress-value {    -webkit-transition: all 10s;    }
progress[data-animation-time="15"]::-webkit-progress-value {    -webkit-transition: all 15s;    }
progress[data-animation-time="20"]::-webkit-progress-value {    -webkit-transition: all 20s;    }
progress[data-animation-time="25"]::-webkit-progress-value {    -webkit-transition: all 25s;    }
...

它有效,但我对我的解决方案非常不满意。必须有更好的方法......

2 个答案:

答案 0 :(得分:3)

您可以使用javascript修改css规则!

var rule;

$(".animationtimeFirst").change(function() {
    time = $(this).val();


    // Write out out full CSS selector + declaration
    s = '.progressselector::-webkit-progress-value { -webkit-transition: all ' + time + 's; }';

    // Check the rules
    // If there's no rules,
    if ((!rule && rule !== 0) || !document.styleSheets[0].cssRules.length) {
        // Make one! -- Insert our CSS string into the page stylesheet
        rule = document.styleSheets[0].insertRule(s, 0);
        // I think this code is different in IE, beware!
        console.log('Our rule is #' + rule);
    } else {
    // If we already have a rule we can change the style we've implement for the psuedo class
    document.styleSheets[0].rules[rule].style.webkitTransitionDuration = time.toString() + 's';
    }
});

这是一个更新的小提琴:http://jsfiddle.net/trolleymusic/MHYY8/3/ - 希望它有帮助:)

答案 1 :(得分:0)

progress::-webkit-progress-value不是DOM元素(它是Shadow DOM的一部分)。所以你不能用jQuery或任何DOM方法来处理它。

这一切都归结为像你这样的解决方法。

修改

事实证明,在最近的Chrome版本中,您实际上可以使用webkitShadowRoot属性访问Shadow DOM。不幸的是,它不适用于<progress />元素。