【发布时间】:2023-03-02 23:22:02
【问题描述】:
我正在我的应用程序中尝试暗模式,其中有一个包含数据的表格。出于某种原因,我必须使用 Javascript 设置表格行背景悬停颜色。现在暗模式和亮模式都只有一种背景悬停颜色。例如,如果我的背景悬停效果使用 Javascript 设置为红色,用于浅色模式,那么它对于深色模式也是红色的,这看起来很糟糕。如果我将mouseout 和mouseover 事件放在if statements 中的switchTheme 函数中,它不起作用。
我想要的是根据我所处的模式将背景悬停颜色设置为不同。如果我处于浅色模式,我会说红色/白色悬停背景颜色,当我处于深色模式时,它会自动更改为蓝色/绿色。
这是sn-p:
const toggleSwitch = document.querySelector('#dark-mode-button input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
}else {
document.documentElement.setAttribute('data-theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
$("body").on("mouseover", "table tr", function() {
$(this).css("background", "red");
});
$("body").on("mouseout", "table tr", function() {
$(this).css("background", "#fff");
});
:root {
--primary-color: #495057;
--bg-color-primary: #F5F5F5;
}
body{
background-color: var(--bg-color-primary);
}
[data-theme="dark"] {
--primary-color: #8899A6;
--bg-color-primary: #15202B;
}
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
background-color: #fff;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="dark-mode-button">
<input id="chck" type="checkbox">Dark Mode
<label for="chck" class="check-trail">
<span class="check-handler"></span>
</label>
</div>
<table class="table">
<thead>
<tr>
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</tbody>
</table>
【问题讨论】:
-
我可以建议使用css:hover 吗?另请注意,您的
mouseover和mouseout选择器不相同。 -
修复了选择器。抱歉,由于某种原因我想通过 Javascript 设置悬停效果,所以我不能使用它。我有一个动态表,有一个
rowspan的问题。因此,当我使用 css hover 时,有些部分会悬停,而有些则不会。所以这就是为什么我必须通过 JS 设置悬停效果 -
你对为什么据称不能使用 CSS 的解释听起来很假。您通过 JS 所做的一切,就是对整个表格行的悬停做出反应,然后为这些行设置背景。您对为什么仅使用
tr:hover { background: red; }不可能做到这一点的解释到目前为止没有什么意义,使用您显示的代码。你提到了行跨度,但我在你的 HTML 中没有看到,我也没有看到你的 JS 代码以任何方式考虑到它。 -
这不是我一直在处理的实际表格。你不能在不了解问题的情况下就说这是假的。我不能使用css,因为我有一个理由。这不是我要找的。听说过“桌面悬停斑马效应”吗?我有我的动态数据。我必须发布 500 行代码来解释这一点。相反,我想用 JS 来做。所以如果你不能用 JS 解决这个问题,那么请继续。
-
有一个斑马效果的例子,它仍然不需要javascript:stackoverflow.com/questions/15464831/… 但你是对的:如果你想用javascript,你可以这样做。
标签: javascript jquery