表格单元格闪烁边框

时间:2014-03-22 16:23:22

标签: javascript css css-animations

我正在创建一个用户界面,我需要突出显示表格中的单元格。我已经使用着色其他东西,所以我需要使用边框。我已经创建了将css更改为虚线的css,但这并没有突出显示。我想知道是否有任何方法可以为边框设置动画,以便它们可以闪烁或旋转(典型的虚线边框动画)。我尝试使用@keyframes和动画,但失败了。

我很高兴用javascript做到这一点,但我不能使用jQuery或任何其他框架。

如果有人提出突出显示单元格的任何其他建议,那也可能有所帮助。

我使用的测试代码是:

<table class="t">
    <tr>
        <td class="t">1</td>
        <td class="t top">2</td>
        <td class="t">3</td>
    </tr>
    <tr>
        <td class="t left">4</td>
        <td class="t middle">5</td>
        <td class="t right">6</td>
    </tr>
    <tr>
        <td class="t">7</td>
        <td class="t bottom">8</td>
        <td class="t">9</td>
    </tr>
</table>    

CSS:

table.t {
    border-collapse: collapse;
    border:1px;
    table-layout:fixed;
}

td.t {
    border: 1px solid black;
    width: 50px;
}

td.top {
    border-bottom: 1px dashed black;
}
td.left {
    border-right: 1px dashed black;
}
td.right {
    border-left: 1px dashed black;
}
td.bottom {
    border-top: 1px dashed black;
}
td.middle {
    border: 1px dashed black;
}

Jsfiddle可用HERE

3 个答案:

答案 0 :(得分:4)

不确定您正在寻找什么,但这里是一个简单的关键帧,它应用了一个盒子阴影和一个改变透明度的关键帧......你必须添加适当的供应商前缀,当然。

<强> CSS

td.selected {
    -webkit-animation: pulse-border 1s infinite;
}

// pulsing border
@-webkit-keyframes pulse-border {
    from, to { box-shadow: 0 0 0 0 black;}
    50% { box-shadow: 0 0 0 4px black; }
}

// flash the cell contents if applied to cell
@-webkit-keyframes flash {
    from, to { opacity: 1 }
    50% { opacity: 0 } 
}

<强> DEMO

编辑

也让这个变得有趣......旋转式边框。 DEMO ...因为所有额外的元素而非常糟糕。

答案 1 :(得分:1)

你可以使用边框图像,渐变,甚至多个框阴影来绘制边框。

悬停时的动画或过渡也可以为它们设置动画。

渐变示例:http://codepen.io/gc-nomade/pen/jdwgG 以及有趣的动画版http://codepen.io/anon/pen/rHxCg

或带有框阴影(对不起华而不实):http://codepen.io/gcyrillus/pen/bGFLA

你也有轮廓和轮廓偏移http://jsfiddle.net/2822m/4/

table.t {
    border-collapse: collapse;
    border:1px;
    table-layout:fixed;
}
td.t {
    border:1px solid;
    width: 50px;
}
td.top {
    border-bottom: none;
}
td.left {
    border-right:none;
}
td.right {
    border-left: none;
}
td.bottom {
    border-top: none;
}
td.middle {
    border: 1px solid red;
    outline:1px dashed black;
    outline-offset:-1px;
}

动画很简单http://jsfiddle.net/2822m/5/

td.middle {
    border: 1px solid red;
    outline:1px dashed black;
    outline-offset:-1px;
    animation:blink 1s infinite;
}
@keyframes blink {
    50% {
        outline:1px dashed yellow;
    }
}

答案 2 :(得分:1)

简单的JavaScript回答:

var blinkStatus = 'off',
    currentBlinkElement = null,
    blinkTimer,
    blinkSpeed = 500,
    stopBlinkButton = document.getElementById( 'stopBlinkButton' );

function blink( element )
{
    currentBlinkElement = element;
    if( blinkStatus == 'off' ) {
        currentBlinkElement.className = currentBlinkElement.className  + ' blink-on';
        blinkStatus = 'on';
    } else {
        currentBlinkElement.className = currentBlinkElement.className.replace( ' blink-on', '' );
        blinkStatus = 'off';
    }
    blinkTimer = setTimeout( function(){ blink( element ); }, blinkSpeed );
}

function stopBlink()
{   
    clearTimeout( blinkTimer );
    if( currentBlinkElement != null ) {
        currentBlinkElement.className = currentBlinkElement.className.replace( ' blink-on',  '' );
        currentBlinkElement = null;
    }
}

document.onclick = function( e ) {
    var clickedElement;
    if(e == null) {
        clickedElement = event.srcElement;
    } else {
        clickedElement = e.target;
    }

    if( clickedElement.tagName == 'TD' ) {
        stopBlink();
        blink( clickedElement );
    }
};

stopBlinkButton.onclick = function(){
    stopBlink();
};

JSFiddle工作示例:http://jsfiddle.net/2Vfu5/。单击表格单元格开始。