所以这看起来像一个简单的答案的简单问题,但我无法解决它。我使用Less,我只是无法弄清楚如何在javascript中使用less.js函数?
我想在普通的javascript中使用混合函数found here,所以:
$('.orange-text').css({
color: less.mix('#FF6B3A','#6600CC','50%')
});
但它总是未定义,我似乎无法找到有关如何引用该函数的任何文档,但肯定可能吗?
非常感谢任何帮助。
答案 0 :(得分:3)
没有"官方"方式,但您可以使用functionRegistry
获取功能。
假设您在页面上添加了less.js
var mix = less.functions.functionRegistry.get('mix');
var Color = less.tree.Color;
var d50 = new less.tree.Dimension(50);
var c1 = new Color("000fff");
var c2 = new Color("ff0000");
console.log(mix(c1, c2, d50).toRGB());
请注意,它在使用lessjs
内部时,在迁移到其他less
版本时完全不可靠。因此,如果您只想使用一个mix
函数,请考虑查找一些库,或编写自己的混合函数。
答案 1 :(得分:2)
您可以使用原生javascript编写类似的方法,这个想法非常简单
function HexToRgb(hexstr){
var a = [];
hexstr = hexstr.replace(/[^0-9a-f]+/ig, '');
if (hexstr.length == 3) {
a = hexstr.split('');
} else if (hexstr.length == 6) {
a = hexstr.match(/(\w{2})/g);
}
else{
throw "invalid input, hex string must be in the format #FFFFFF or #FFF"
}
return a.map(function(x) { return parseInt(x,16) });
}
function IntToHex(i){
var hex = i.toString(16);
if(hex.length == 1)
hex = '0' + hex;
return hex;
}
function Mix(colorA,colorB,weight){
var a = HexToRgb(colorA);
var b = HexToRgb(colorB);
var c0 = Math.round((a[0] + (Math.abs(a[0]-b[0])*weight)) % 255);
var c1 = Math.round((a[1] + (Math.abs(a[1]-b[1])*weight)) % 255);
var c2 = Math.round((a[2] + (Math.abs(a[2]-b[2])*weight)) % 255);
return "#" + IntToHex(c0) + IntToHex(c1) + IntToHex(c2)
}
document.getElementById("output").innerHTML = Mix("#ff0000","#0000ff",0.5);
(第三参数)确定的数量下面的示例与less documentation example
匹配
Mixing #ff0000 and #0000ff at 50% gives <span id="output"><span>
&#13;
{{1}}&#13;
答案 2 :(得分:1)
它不能以这种方式使用。见answer。 less.js是一个客户端预处理器,它将你的风格变为css。
答案 3 :(得分:1)
我已经在lessToCSS
中创建了一个名为document
的辅助函数,只要您想在应用程序中使用更少的东西来设置样式,就可以调用它。
示例:
(function(d) {
d.lessToCSS = function (css) {
less.render(css).then(function(obj) {
var stl = d.createElement('style');
stl.textContent = obj.css;
d.querySelector('head').appendChild(stl);
});
};
})(document);
document.querySelector('button').addEventListener('click', function(e) {
document.lessToCSS('.orange-text { background-color: mix(#FF6B3A, #6600CC, 50%) }');
});
&#13;
.orange-text {
background-color: orange;
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.1/less.min.js"></script>
<div class="orange-text">
Test
</div>
<button>Change background</button>
&#13;