javascript - CSS 动画从 JS 事件开始,使用可变颜色

标签 javascript html css dom-events css-animations

我有一个单元格表,每当我单击一个单元格时,我希望它开始闪烁一种颜色,表明它已被选中,并阻止其他单元格闪烁,从而取消选择它们(因此一次只有一个单元格被选中)。我还希望单元格“记住”它以前的颜色是什么,所以它会在旧颜色和新的“选择颜色”之间闪烁。

问题是:

  1. 我不知道如何取消选择。 完成!

  2. 它不记得旧颜色,在本例中是红色,但它可以是任何颜色(取决于变量)仍在进行中

    <

更新:感谢您的回答,我已经使用了您的一些方法,但还没有完全涵盖我的目标。这就是我现在拥有的:https://jsfiddle.net/t3g3mq02/12

我仍然遇到的问题是,如果 JS 更改常规背景颜色,CSS 动画不会更改,因为它似乎继承了 CSS 的颜色。在最终代码中,我有改变背景颜色的函数,我在示例代码中使用以下行对此进行了模拟:tds[i].style.backgroundColor = "blue";。我将它添加到迭代中,只是作为示例。

解决方案可能是用 JS 改变动画的样式,但我不知道该怎么做。

HTML:

<table style="width:100%">
  <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>94</td>
  </tr>
</table>

JS:

var tds = document.getElementsByTagName("td");
for(var i=0; i<tds.length; i++) {
    tds[i].style.backgroundColor = "blue";
    tds[i].onclick = function() {
        var selected = document.getElementsByClassName("selected");
        if(selected.length > 0)
            selected[0].className = "";
        this.className = "selected";
    };
}

CSS:

tr {
    background: red
}

.selected {
    animation: colorchange 1.5s infinite;
    -webkit-animation: colorchange 1.5s infinite;
}

@keyframes colorchange
{
    0%, 100%   {background: inherit;}
    40%  {background: cyan;}
}

@-webkit-keyframes colorchange /* Safari and Chrome - necessary duplicate */
{
    0%, 100%   {background: inherit;}
    40%  {background: cyan;}
}

随意废弃我的代码并提出一个全新的方法!

最佳答案

HTML:

   <table style="width:100%">
        <tr>
            <td class='cell-color'>Jill</td>
            <td class='cell-color'>Smith</td> 
            <td class='cell-color'>50</td>
        </tr>

更改:从 html 中删除了所有 javascript。给单元格一个类名以供选择。

Javascript:

(function(){
    var cells = document.querySelectorAll('.cell-color')

    for(var i = 0; i < cells.length; i++){
        cells[i].addEventListener('click', changeColor, false);
    }

})();

function changeColor(cell){
    var old = document.querySelector('.selected');
    old.className = 'cell';

    var cell = cell.targetElement.src;

    cell.className += 'selected';
}

在这里,我通过类名选择所有单元格,向每个单元格添加一个 eventListener,删除旧的选定类并添加一个新的选定类。

CSS:

tr {
    background-color: red;
}

@keyframes colorchange
{
    0%, 100%   {background: inherit;}
    40%  {background: cyan;}
}

更改:使用从 tr 继承,因此您不必使用复杂的 javascript dom css api 来更改 keyframe 中的值。

jsfiddle ;

关于javascript - CSS 动画从 JS 事件开始,使用可变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595657/

相关文章:

javascript - jQuery如何找到图像上层元素

html - 如何在小视口(viewport)上显示图像下方的文字?

javascript - 根据偏移量更新表格单元格

javascript - Vue - 为什么有些图像在生产中获得哈希值,而其他图像则没有?

javascript - 我可以在 Node.js 微服务中使用多个事件循环吗?

javascript - 根据数据对 div 进行排序

JavaScript "keydown"工作不正确

c# - 如何声明和使用来自 json 对象的函数名?

javascript - overlay 的位置在页面的右下方

html - 需要移除 IE8 中显示的滚动条以用于嵌入播放器