问题描述
我需要格式化字符串以将其作为jQuery (-4,2)
的持续时间传递,该字符串是我在JavaScript中访问的CSS变量。
jQuery的fadeOut
接受数字或关键字字符串,我想将CSS var格式化为数字并将其转换为毫秒,以便可以用作fadeOut
的持续时间值
CSS变量用于fadeOut
计时,因此CSS作者可以以几种不同的格式设置此值,例如:
transition
我要在LESS样式表中设置CSS变量
300ms
0.9s
.4s
并在JS中访问它(简体)
:root {
--transition__duration: @transition__duration; // 300ms
}
var transitionVarName = '--transition__duration',transitionVar = getComputedStyle(docRoot).getPropertyValue(transitionVarName),transitionDuration = transitionVar ? transitionVar : 300,fadeSpeed = clean(transitionDuration);
element.fadeOut(fadeSpeed)
clean: function (str) {
var num = str;
return parseFloat(num);
}
适用于parseFloat(num)
之类的值,这给了我300ms
,但是当我传递诸如300
之类的东西时,它返回.3s
,我明白这是期望的3
的行为,但我不确定要获得所需格式的数学运算,例如
parseFloat
编辑:
解决方案
300ms // 300
0.9s // 900
.4s // 400
解决方法
这里有些东西在飞奔中,(它也在这里晚了……也许我没有涵盖全部)
let arr = ["300ms","0.9s",".4s","3s"]
arr.forEach(time => {
time = "0" + time;
//console.log(time)
if (time.includes(".") || time.endsWith('s') && !time.endsWith('ms')) {
time = time.replaceAll('s','');
time = time * 1000;
}
time = parseFloat(time)
console.log(time)
});
所以你应该有我的想法:
clean: function(str) {
var num = str;
num = "0" + num;
if (num.includes(".") || num.endsWith('s') && !num.endsWith('ms')) {
num = num.replaceAll('s','');
num = num * 1000;
}
return parseFloat(num);
}