Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建DIV样式的切换器?_Javascript_Html_Css - Fatal编程技术网

Javascript 如何创建DIV样式的切换器?

Javascript 如何创建DIV样式的切换器?,javascript,html,css,Javascript,Html,Css,我想用JavaScript制作一个CSS样式的切换器,就像Digg在这里做的一样 我有一个div,我想根据主题选择改变div框的样式 我不想使用jQuery,我想用纯JavaScript开发这段代码。其实很简单,用户选择一种颜色(#544856),然后使用onchange事件或类似事件执行以下操作: document.getElementById("myDiv").style.color = document.getElementById("myColorTextBox").

我想用JavaScript制作一个CSS样式的切换器,就像Digg在这里做的一样

我有一个div,我想根据主题选择改变div框的样式


我不想使用jQuery,我想用纯JavaScript开发这段代码。

其实很简单,用户选择一种颜色(#544856),然后使用onchange事件或类似事件执行以下操作:

 document.getElementById("myDiv").style.color = 
       document.getElementById("myColorTextBox").value;

其实很简单,用户选择一种颜色(#544856),然后使用onchange事件或类似事件执行以下操作:

 document.getElementById("myDiv").style.color = 
       document.getElementById("myColorTextBox").value;

最简单的方法是创建两个样式表,其中包含相同的类,但颜色不同等。然后允许用户在它们之间切换,下面是一个示例链接:


最简单的方法是创建两个样式表,其中包含相同的类,但颜色不同等。然后允许用户在它们之间切换,下面是一个示例链接:


检查源代码以及它如何随着主题的变化而变化,这真的很简单。Digg正在利用CSS的惊人之处,通过简单地更改元素的类来大幅更改内容。你所要做的就是:

<div id="theme_viewer">
<!-- HTML code for your widget/thing to be styled -->
</div>
然后,您的CSS样式表可以执行不同样式所要求的任何操作:

#theme_viewer.theme1 {
    background-color: red;
}

#theme_viewer.theme2 {
    background-color: blue;
}

#theme_viewer.theme3 {
    background-color: black;
    color: white;
}

#theme_viewer.theme4 {
    background-color: orange;
}

正如J-p的评论和edeverett的回答中提到的,将事件内联不是一个好主意,因为我在本例中使用了它们(即,使用
onclick
属性)。我这样做是为了简单,但这不是一个好主意。更好的方法是等待文档加载并使用Javascript动态附加事件处理程序。这被称为不引人注目的Javascript,它是一个好东西TM

以下良好实践的上例示例如下所示:

<ul id='theme_options'>
  <li><a href="#" id='theme1'>theme 1</a></li>
  <li><a href="#" id='theme2'>theme 2</a></li>
  <li><a href="#" id='theme3'>theme 3</a></li>
  <li><a href="#" id='theme4'>theme 4</a></li>
</ul>
要添加事件处理程序,请执行以下操作:

addEvent(window, 'load', function() {
    var opts = document.getElementById('theme_options');
    var links = opts.getElementsByTagName('a');
    for(var x = 0; x < links.length; x++) {
        addEvent(links[x], 'click', function() {
            switchTheme(links[x].id);
        });
    }
});

检查源代码以及它如何随着主题的改变而改变,这真的很简单。Digg正在利用CSS的惊人之处,通过简单地更改元素的类来大幅更改内容。你所要做的就是:

<div id="theme_viewer">
<!-- HTML code for your widget/thing to be styled -->
</div>
然后,您的CSS样式表可以执行不同样式所要求的任何操作:

#theme_viewer.theme1 {
    background-color: red;
}

#theme_viewer.theme2 {
    background-color: blue;
}

#theme_viewer.theme3 {
    background-color: black;
    color: white;
}

#theme_viewer.theme4 {
    background-color: orange;
}

正如J-p的评论和edeverett的回答中提到的,将事件内联不是一个好主意,因为我在本例中使用了它们(即,使用
onclick
属性)。我这样做是为了简单,但这不是一个好主意。更好的方法是等待文档加载并使用Javascript动态附加事件处理程序。这被称为不引人注目的Javascript,它是一个好东西TM

以下良好实践的上例示例如下所示:

<ul id='theme_options'>
  <li><a href="#" id='theme1'>theme 1</a></li>
  <li><a href="#" id='theme2'>theme 2</a></li>
  <li><a href="#" id='theme3'>theme 3</a></li>
  <li><a href="#" id='theme4'>theme 4</a></li>
</ul>
要添加事件处理程序,请执行以下操作:

addEvent(window, 'load', function() {
    var opts = document.getElementById('theme_options');
    var links = opts.getElementsByTagName('a');
    for(var x = 0; x < links.length; x++) {
        addEvent(links[x], 'click', function() {
            switchTheme(links[x].id);
        });
    }
});
这可能会对您有所帮助:“

因此,当用户单击主题更改按钮时,onclick事件将加载一个外部CSS文件

不过,使用jQuery可能更容易/更快。您还需要存储一个变量,以指示用户选择了不同的主题。

这可能会对您有所帮助:“

因此,当用户单击主题更改按钮时,onclick事件将加载一个外部CSS文件


不过,使用jQuery可能更容易/更快。您还需要存储一个变量,以指示用户选择了不同的主题。

这有三个部分:

1)div本身 对于所有样式,这几乎保持不变。Javascript只会更改class属性以更改CSS应用于div的样式。创建div,使其在创建页面时具有默认样式,并添加一个id,以便我们可以在以后使用Javascript轻松获得它:

<div class="style1" id="styleBox"></div>
然后为各个样式设置规则:

.style1{背景色:浅绿色;} .style2{背景色:黄色;} .style3{背景色:粉红色;}

请注意,这些都在同一个样式表中,这将使其更易于管理

3)Javascript 这就是添加行为的地方。您还需要单击一些链接,理想情况下,这些链接应该使用JS创建,因为如果没有JS,用户将无法使用它们-但现在让我们假设它们位于页面中:

<div id="styleMenu">
  <a href="#" id="style1" >Style 1</a>
  <a href="#" id="style2" >Style 2</a>
  <a href="#" id="style3" >Style 3</a>
</div>

您需要有一个在页面加载时运行的JS函数(google“javascript onload函数”)。在这个函数中,您需要获取对包含链接的div的引用,并在中添加onClick事件。当点击链接时,此事件将被触发-这称为事件委派(google it)。在这个事件函数中,您需要使用查找已单击的链接,然后将样式化div的className属性设置为已单击链接的id


我将把编写JS留给您,但是如果您使用这种稍微长一点的方式来做事情,而不是使用内联样式或javascript,您将HTML、CSS和javascript完全分离,这将使维护一切变得更加容易。

这有三个部分:

1)div本身 对于所有样式,这几乎保持不变。Javascript只会更改class属性以更改CSS应用于div的样式。创建div,使其在创建页面时具有默认样式,并添加一个id,以便我们可以在以后使用Javascript轻松获得它:

<div class="style1" id="styleBox"></div>
然后为各个样式设置规则:

.style1{背景色:浅绿色;} .style2{背景色:黄色;} .style3{背景色:粉红色;}

请注意,这些都在同一个样式表中,这将使其更易于管理

3)Javascript 这就是添加行为的地方。您还需要单击一些链接,理想情况下,这些链接应该使用JS创建,因为如果没有JS,用户将无法使用它们-但现在让我们假设它们位于页面中:

<div id="styleMenu">
  <a href="#" id="style1" >Style 1</a>
  <a href="#" id="style2" >Style 2</a>
  <a href="#" id="style3" >Style 3</a>
</div>

您需要有一个在页面加载时运行的JS函数(google“javascript onload函数”)。在这个函数中,您需要获取对包含