gpt4 book ai didi

javascript - 当其他元素出现和消失时平滑地改变 HTML 元素位置的通用方法

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:44 54 4
gpt4 key购买 nike

我对 Web 开发的了解不够好,无法判断我的问题是否已经得到解答 here , 如果这是重复的,我们深表歉意。

我打算在我的网站上有很多不同的页面,所有页面的结构都不同,所有这些页面都需要在各种不同的屏幕尺寸上看起来合理。这些页面将包含和/或链接到代码,使各种内容出现和消失。然而,在其中一些页面上,我发现同时出现和消失的内容太多,读者对到底发生了什么变化感到困惑。为了解决这个问题,我很乐意编写一些 CSS 或一些 JS 来确保当元素的位置发生变化时,它会平滑地移动到新位置而不是仅仅跳到那里。希望这能帮助最终用户更好地了解内容的变化。

我目前正在尝试使用应用于“position”属性的“transition”来使用 CSS,但无济于事。这是代码:

function toggleVisibility(elementId) {
var element = document.getElementById(elementId);
if (element.style.display === "none") {
element.style.display = null;
} else {
element.style.display = "none";
}
}
#lol {
position: relative;
transition: position 2s;
transition-timing-function: linear;
-webkit-transition-timing-function: linear;
}
<head>
<title>Title</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

</head>

<body>
<div id="foo"> foo </div>
<div id="bar"> bar </div>
<div id="lol"> lol </div>
<button onmouseup="toggleVisibility('bar')"> Click me</button>
</body>

不幸的是,这没有任何帮助。没有平稳的过渡;说“lol”的文字瞬间跳来跳去。

想法,有人吗? javascript 解决方案很好,但我正在寻找足够通用的东西,以便它可以应用于页面上的任何位置,而无需预先计算任何值,如果这有意义的话。

最佳答案

您需要定义元素的高度,auto 不会设置动画。此外,您不应该使用 id 来设置对象样式,最好使用一个类,这样您就不会遇到特异性问题。

这是一个工作示例,我还添加了 opacityoverflow: hidden 以使元素消失:

function toggleVisibility(elementId) {
var element = document.getElementById(elementId);
element.classList.toggle("hidden");
}
.item {
position: relative;
height: 20px;
overflow-y: hidden;
opacity: 1;
transition: height 0.5s, opacity 0.3s;
transition-timing-function: linear;
-webkit-transition-timing-function: linear;
}
.hidden {
height: 0;
opacity: 0;
}
<head>
<title>Title</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

</head>

<body>
<div id="foo" class="item"> foo </div>
<div id="bar" class="item"> bar </div>
<div id="lol" class="item"> lol </div>
<button onmouseup="toggleVisibility('bar')"> Click me</button>
</body>

关于javascript - 当其他元素出现和消失时平滑地改变 HTML 元素位置的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58369866/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com