如何设置带有淡入效果的`innerText`?

How do you set `innerText` with fade-in effect?

假设您有一个按钮可以替换同一页面同一区域内的段落。

你能通过设置 innerTexttextContent 使每次切换都淡入淡出吗?

我现在使用 keyframes 将其不透明度从 0 更改为 1,但它仅适用于页面加载后的第一段。之后,每当我用 innerText 替换文本时,效果根本不显示。

所有排队等候的文本都硬编码在 JavaScript 中,而不是 HTML - 如果它进行了更改。

您是否尝试过添加 css 过渡?

例如,我用它来 css 延迟背景颜色转换:

.fader {
        color: #bbb;
        padding: 6px;
        -webkit-transition: all 0.5s;
        transition: all 0.5s; 
}

w3c 学校页面上有更多关于转换的信息: http://www.w3schools.com/css/css3_transitions.asp

看这个Fiddle

您可以使用 jQuery text() 函数,然后使用 fadeIn() 来实现此效果。不确定这是否适用于 Javascript 的 innerText

 $(this).text('Some other text!').fadeIn(500);

我会这样做:

var i = 0;
var strings = ['first string........', 'second string.........', 'third string..........', 'fourth string...............'];
$('#add-text').click(function () {

    if (i > strings.length - 1) i = 0;

    var $result = $('#result');
    $result.fadeOut("fast", function () {
        $result.text(strings[i]).delay(300).fadeIn('slow');
        i++;
    });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="add-text">Add Text</button><br>
<p id="result">Here is some default text....</p>

您需要引入延迟或重绘。引入延迟可能是最简单的。

p.classList.add('hide');               // add the class
setTimeout(function() {                // delay and 
    p.textContent = txtList[idx];      // change text
    idx = (idx + 1) % txtList.length;
}, 500);
setTimeout(function() {                // delay and 
    p.classList.remove('hide')         // remove the class
}, 500);

Fiddle: http://jsfiddle.net/abhitalks/rdnt9d5w/

片段:

var txtList = [
    'Lorem', 'ipsum', 'dolor', 'sit', 'amet', 
    'Lorem ipsum dolor sit amet'
], idx = 0, 
   p = document.getElementById('p1');

document.getElementById('btn1').addEventListener('click', fadein);

function fadein() {
    p.classList.add('hide');
    setTimeout(function() { 
        p.textContent = txtList[idx];
        idx = (idx + 1) % txtList.length;
    }, 500);
    setTimeout(function() { 
        p.classList.remove('hide')
    }, 500);
}
p { opacity: 1; transition: all 0.5s; }
p.hide { opacity: 0; }
<p id="p1">Lorem ipsum dolor sit amet</p>
<hr />
<button id="btn1">Change</button>