单击两个不同的按钮时如何在同一文本上应用不同的动画
How to apply different animation on the same text when two different buttons are clicked
我有一个按钮,点击它会显示一个 <p> text <p/>
元素,我给它一个动画(从上到下),但现在我创建了另一个按钮,点击它会删除 <p> text <p/>
中的文本=14=] 元素我想在发生这种情况时添加动画,但是当我编写 CSS 代码以在删除时为文本设置动画时,它似乎覆盖了之前的动画。
CSS 中有 if else 语句吗?我可以在 JavaScript 中做吗?
这是香草 JavaScript 和 CSS.
<button class="button" onclick="Click()">click me</button>
<p id="appear" hidden>This text should appear on click</p>
<button class="butremove" onclick="ClickRemove()">click me to delete message</button>
@keyframes buttonappear {
0% {top: 10px;}
100% {top: 175px;}
}
#appear {
position: absolute;
top: 175px;
animation-name: buttonappear;
animation-duration: 2.5s;
}
const Click = () => {
document.getElementById("appear").style.display = "block";
}
const ClickRemove = () => {
document.getElementById("appear").style.display = "none";
}
我可以使用什么 CSS 或 JS 代码在文本消失时为文本设置动画而不覆盖之前的动画?
不使用 @keyframes
动画,您可以使用 transition
属性 并在 <p>
上切换 CSS class元素。由于您想执行动画以响应某个动作,因此 transition
非常适合这种情况。反转状态 mid-animation 也会自动处理。
这是一个例子:
这里的方法是在 <p>
元素上设置隐藏样式,并定义一个包含可见样式的单独 class (visible
)。根据单击哪个按钮,visible
class 将添加到 <p>
元素或从中删除 transition
将在两种样式之间设置动画。
const message = document.querySelector("#message");
function clickShow() {
message.classList.add("visible");
}
function clickRemove() {
message.classList.remove("visible");
}
#message {
position: absolute;
opacity: 0;
top: 10px;
transition: 2.5s;
}
#message.visible {
opacity: 1;
top: 175px;
}
<button class="button" onclick="clickShow()">click me</button>
<p id="message">This text should appear on click</p>
<button class="butremove" onclick="clickRemove()">click me to delete message</button>
实际上,如果您只使用一个按钮来切换消息,上面的代码可以简化很多,如下所示:
const message = document.querySelector("#message");
function toggleMessage() {
message.classList.toggle("visible");
}
#message {
position: absolute;
opacity: 0;
top: 10px;
transition: 2.5s;
}
#message.visible {
opacity: 1;
top: 175px;
}
<button class="button" onclick="toggleMessage()">click me</button>
<p id="message">This text should appear on click</p>
我有一个按钮,点击它会显示一个 <p> text <p/>
元素,我给它一个动画(从上到下),但现在我创建了另一个按钮,点击它会删除 <p> text <p/>
中的文本=14=] 元素我想在发生这种情况时添加动画,但是当我编写 CSS 代码以在删除时为文本设置动画时,它似乎覆盖了之前的动画。
CSS 中有 if else 语句吗?我可以在 JavaScript 中做吗? 这是香草 JavaScript 和 CSS.
<button class="button" onclick="Click()">click me</button>
<p id="appear" hidden>This text should appear on click</p>
<button class="butremove" onclick="ClickRemove()">click me to delete message</button>
@keyframes buttonappear {
0% {top: 10px;}
100% {top: 175px;}
}
#appear {
position: absolute;
top: 175px;
animation-name: buttonappear;
animation-duration: 2.5s;
}
const Click = () => {
document.getElementById("appear").style.display = "block";
}
const ClickRemove = () => {
document.getElementById("appear").style.display = "none";
}
我可以使用什么 CSS 或 JS 代码在文本消失时为文本设置动画而不覆盖之前的动画?
不使用 @keyframes
动画,您可以使用 transition
属性 并在 <p>
上切换 CSS class元素。由于您想执行动画以响应某个动作,因此 transition
非常适合这种情况。反转状态 mid-animation 也会自动处理。
这是一个例子:
这里的方法是在 <p>
元素上设置隐藏样式,并定义一个包含可见样式的单独 class (visible
)。根据单击哪个按钮,visible
class 将添加到 <p>
元素或从中删除 transition
将在两种样式之间设置动画。
const message = document.querySelector("#message");
function clickShow() {
message.classList.add("visible");
}
function clickRemove() {
message.classList.remove("visible");
}
#message {
position: absolute;
opacity: 0;
top: 10px;
transition: 2.5s;
}
#message.visible {
opacity: 1;
top: 175px;
}
<button class="button" onclick="clickShow()">click me</button>
<p id="message">This text should appear on click</p>
<button class="butremove" onclick="clickRemove()">click me to delete message</button>
实际上,如果您只使用一个按钮来切换消息,上面的代码可以简化很多,如下所示:
const message = document.querySelector("#message");
function toggleMessage() {
message.classList.toggle("visible");
}
#message {
position: absolute;
opacity: 0;
top: 10px;
transition: 2.5s;
}
#message.visible {
opacity: 1;
top: 175px;
}
<button class="button" onclick="toggleMessage()">click me</button>
<p id="message">This text should appear on click</p>