Javascript 将动态CSS注入文档?
向文档中注入动态CSS代码以便在运行时预览所做的更改的最佳方法是什么 我在HTML页面中有一个文本区,我将在其中键入CSS代码。我想从文本区域更新页面的样式。这是我目前使用的方法Javascript 将动态CSS注入文档?,javascript,jquery,performance,Javascript,Jquery,Performance,向文档中注入动态CSS代码以便在运行时预览所做的更改的最佳方法是什么 我在HTML页面中有一个文本区,我将在其中键入CSS代码。我想从文本区域更新页面的样式。这是我目前使用的方法 <!DOCTYPE html> <html> <head> <title>Dynamic CSS Experiments</title> <meta charset=utf-8 /> <meta name="viewp
<!DOCTYPE html>
<html>
<head>
<title>Dynamic CSS Experiments</title>
<meta charset=utf-8 />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<style id="dynamic-css" type="text/css"></style>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
jQuery(function ($) {
var styleTag, textArea;
styleTag = $("#dynamic-css");
textArea = $("#css-ta");
textArea.on('keydown', function () {
styleTag.html(textArea.val())
});
});
</script>
</head>
<body>
<textarea name="css" id="css-ta" cols="30" rows="10"></textarea>
...
</body>
</html>
动态CSS实验
jQuery(函数($){
var-styleTag,textArea;
styleTag=$(“#动态css”);
textArea=$(“#css ta”);
textArea.on('keydown',函数(){
html(textArea.val())
});
});
...
这是最好的方法吗?还有其他聪明的方法吗?我认为“最好”的方法对每种情况都是独一无二的
根据您的脚本,向keydown事件添加限制可能会很有用,这样可以减少样式更新的数量并提高性能
请参见$.throttle或$.debounce
例如,在执行< < /P> > P>时,考虑jQuery函数:<代码> .Advase>(和代码> >和代码> .ReaveCeLasSe()/代码>,以便动态地应用CSS样式。 < P>一个更改进的版本将是这样的:
jQuery(function ($) {
var styleTag, textArea;
var kI;
styleTag = $("#dynamic-css");
textArea = $("#css-ta");
textArea.on('keyup', function () {
if (kI !== undefined) {
clearTimeout(kI);
}
kI = setTimeout(function() {
styleTag.html(textArea.val());
},1000);
});
});
这会使keyup事件超时(keyup发生在keydown之后,防止有人重复按下某个键),从而在事件发生后触发1s。每次事件发生时,都会重置倒计时。如果倒数运行,您的CSS将更新
这样可以避免对样式块的内容进行过多的重写。尝试这样的方法来限制更新的次数
<!DOCTYPE html>
<html>
<head>
<title>Dynamic CSS Experiments</title>
<meta charset=utf-8/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<style id="dynamic-css" type="text/css"></style>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
jQuery(function ($) {
var styleTag, textArea, active=true, threashold=100;
styleTag = $("#dynamic-css");
textArea = $("#css-ta");
textArea.on('keydown', function () {
if (active===true) {
active = false;
setTimeout(function(){
styleTag.html(textArea.val());
active = true;
}, threashold);
}
});
});
</script>
</head>
<body>
<textarea name="css" id="css-ta" cols="30" rows="10"></textarea>
...
</body>
</html>
动态CSS实验
jQuery(函数($){
var styleTag,textArea,active=true,threashold=100;
styleTag=$(“#动态css”);
textArea=$(“#css ta”);
textArea.on('keydown',函数(){
如果(活动===真){
主动=假;
setTimeout(函数(){
html(textArea.val());
主动=真;
},threashold);
}
});
});
...
您所做的非常好,是一种常见的方法。感谢@dda的编辑。更新较大的css文件时是否存在性能问题?jQuery没有内置节流阀(至少内置),您是否将jQuery与下划线混合使用?Muhammed K,当您将新样式应用于文档时,将触发回流事件。更多css更新-更多回流。Benjamin Grunbaum感谢您指出这一点。我添加了一个指向函数实现示例的链接。jQuery有一个debounce插件,可以减少更新次数。在这种情况下是不可能的。这里的课程将被改写。