我需要调整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; }
...
它有效,但我对我的解决方案非常不满意。必须有更好的方法......
答案 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 />
元素。