javascript - 转换未在事件处理程序中触发
问题描述
这是我想要解决手头问题的示例:
https://codepen.io/binnny/pen/ExPpggQ
当我单击按钮时,不会translateY()
触发向下滑动,#main_card
这样#next_card
就会出现。我还想重置过渡,因为每张下一张卡最终都会成为主卡,并且必须为下一张卡创建新内容。
因此,对于每次点击它都会:
main: A --> next: B
main: B --> next: C
main: C -- next: D
实际发生的是内容在变化,但没有下滑过渡。不确定如何解决此问题以获得每次点击的预期结果?
HTML
<main id="quote-box">
<div id="next_card">
<p id="_text"></p>
<p id="_author"></p>
</div>
<div id="main_card">
<p id="text"></p>
<p id="author"></p>
</div>
</main>
萨斯
#quote-box {
position: relative;
overflow: hidden;
width: 80vw;
height: 300px;
margin: auto;
border: 7px solid;
#next_card {
display: flex;
flex-direction: column;
justify-content: center;
align-content: center;
text-align: center;
width: 100%;
height: inherit;
}
#main_card {
@extend #next_card;
position: absolute;
top: 0;
}
}
JavaScript
var quotes = [
{text: "Hello Earth!", author: "Me"}, {text: "Hello Mars!", author: "You"},
{text: "Hello Pluto", author: "Dunno"}, {text: "Hello Jupiter!", author: "Fiddo"},
{text: "Hello Uranus!", author: "Bozo"}, {text: "Hello Venus!", author: "Mom"}
];
var button = document.querySelector("button");
window.onload = function(event) {
var next_card = document.getElementById("next_card");
var main_card = document.getElementById("main_card");
[next_card, main_card].forEach(function(card) {
create_quote(card);
});
};
function create_quote(card) {
// style the card with quote
card.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)]
var selected_quote = quotes[Math.floor(Math.random() * quotes.length)];
var card_attrs = Array.prototype.slice.call(card.children);
card_attrs.forEach(function(attr) {
attr.innerText = selected_quote[attr.id.replace("_", "")];
});
return card;
}
function shift_quote(event) {
event.preventDefault();
var next_card = document.getElementById("next_card");
var main_card = document.getElementById("main_card");
main_card.style.transform = "translateY(300px)";
var updated_main_card = next_card.cloneNode(true);
updated_main_card.id = "main_card";
next_card.parentElement.replaceChild(updated_main_card, main_card);
for (var i = 0; i < 2; i++) {
create_quote(next_card);
}
}
解决方案
推荐阅读
- html - 如何使用来自不同文件夹的 Angular 组件?
- docker - 如何为 docker compose run 指定 docker compose 文件?
- delphi - 在地图视图中将文本添加到标记?
- c++ - Qt Installer Framework:如何仅更新已更改的文件?
- javascript - 如何解析包含标签的字符串?
- angular - Angular 11 mat 输入在删除内容时显示 [object HTMLInputElement]
- powershell - Powershell AD(列出空组并列出未使用的本地组)
- ruby-on-rails - “语法错误,意外'\n',期待'。' 或 &. 或 :: 或 '['" 与 Ruby on Rails
- snowflake-cloud-data-platform - 查询分析 - 非常高的同步率?
- node.js - Mern stack Heroku build 提供白页