【问题标题】:Using span with javascript to create CSS transition使用 span 和 javascript 创建 CSS 过渡
【发布时间】:2012-08-21 10:46:42
【问题描述】:

使用 javascript,我从 html div 标签中的文本中随机挑选一个单词,并用 span 标签包围它。使用 span 标签的类,我尝试执行单词颜色从黑色到红色的 CSS 转换。然后我删除 span 标签以将单词改回黑色。我要找的效果是“闪字”。

我设法让单词改变颜色,但无法让平滑的 CSS 过渡正常工作。

我的问题是:为什么 CSS 过渡不起作用?

我的问题似乎类似于this question,但我没有设法让“强制布局”的解决方案在我的情况下起作用。

我希望可以提供指向test code I am working with 的工作链接,而不是在此处发布代码 (javascript file here)。如果没有,我当然会根据要求在这篇文章中添加代码。

提前感谢您!我一整天都在努力解决这个问题,但没有成功。是时候承认我需要帮助了:-)

编辑:添加代码。

HTML:

<div id="message">
Some words here.
</div>

CSS:

div#message span
{
    color: black;
}

div#message span.redtext
{
    transition: color 5s ease-out 0s;
    color: red;
}

Javascript:

//Insert span around word
var newText = text.split(randomWord).join('<span>' + randomWord + '</span>');
$("#message").html(newText);

//Request property that requires layout to force a layout 
var x = $("#message").clientHeight;

//Add class to span
var newText = newText.split('<span>').join('<span class="redtext">');
$("#message").html(newText);

【问题讨论】:

  • 为什么不将 div 中的每个单词转换为 DOMContentLoaded 上的跨度,然后只更改随机跨度的类别?另外,$("#message").clientHeightundefined,你需要$("#message")[0].clientHeight
  • 是的,发布你的代码会很好,因为 1. 关于 SO 的问题应该对未来的读者有一些意义,所以如果你的服务器出现故障或文件被修改,问题和答案将将来仍然有意义;和 2. 没有发布代码(仅链接),看起来有人在特定时间点寻求帮助解决其代码中的问题(可能因过于本地化而关闭) - 但我看到你努力将其最小化到已经是一个可编译的例子。所以,是的,在提问时发布一些相关代码。 =]
  • 感谢您的回复!您的两点很有道理 Fabricio,我将为这个问题添加代码,并为以后的问题提供代码。

标签: javascript css css-transitions


【解决方案1】:

CSS 过渡适用于元素的样式更改。当新的 CSS 样式应用于元素时,您可以指定要在该更改中使用的过渡。在您的示例中,您添加了一个使用红色文本样式创建的跨度。 span元素在创建时具有红色文字样式。您不会将元素从一种样式转换为另一种样式,您只是将其插入到 redtext 类样式中。

你需要做的是在其中添加一个带有黑色文本的跨度,然后将跨度的类从“blacktext”更改为“redtext”,然后将应用过渡。你可以在没有类的情况下插入它然后更改它,但我使用了类“blacktext”以便更容易识别。

参见:

http://jsfiddle.net/n8zNW/

【讨论】:

  • 感谢您的回答!我现在明白,最好用一个黑色文本类来创建跨度,它也可以用来引用跨度。然而,我的问题是,就像上面 Gregs 的回答一样,我在你的 jsfiddle 中看不到任何颜色过渡,即使我将持续时间设置为 10 秒,这个词也会立即变为红色。在最新版本的 Opera、Firefox 和 IE 中测试。也许我遗漏了一些非常基本的东西,我目前还不是网络开发方面的专家。
  • 我成功了!必须将强制布局更正为 '$("#message")[0].clientHeight;'正如 shhac 所写,并在使用黑色文本创建跨度后将其向下移动。感谢您的帮助!
【解决方案2】:

给你的 span 一个类,这样你就可以使用 jquery 轻松获得对它的引用。然后使用 addClass 和 removeClass jquery 方法添加并随后删除赋予文本颜色的类。

这是一个工作示例:http://jsfiddle.net/sVMZJ/

【讨论】:

  • 感谢您的回答!我一定会使用 jquery 参考和方法。然而,我的问题是我在你的 jsfiddle 中看不到任何颜色过渡,即使我将持续时间设置为 10 秒,这个词也会立即变成红色。我开始不相信自己的眼睛了。在最新版本的 Opera、Firefox 和 IE 中测试。
  • 我成功了!必须将强制布局更正为 '$("#message")[0].clientHeight;'正如 shhac 所写,并在使用“highlightedWord”类创建跨度后将其向下移动。谢谢你的帮助!我会接受 Matts 的回答,因为它包含更多解释,尽管您的回答基本相同。
猜你喜欢
  • 2021-07-05
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多