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

标签 javascript css

我对 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/

相关文章:

javascript - 将事件绑定(bind)到 document>element 并向 element 添加EventListener

javascript - 当您链接脚本时,它会自动运行吗?

javascript - 垂直缩放 div 直到显示所有内容?

javascript - 将鼠标悬停在 menuico 上时切换菜单栏

css - 有没有一种语义方法可以用 html 和 css 去强调文本?

javascript - 计算机上的字体列表

javascript - document.getElementsByClassName 返回未定义

javascript - 从计时器开始倒计时

php - 如何对齐页面右侧的链接/图片列表,并阻止它们重叠?

javascript - 将输入旋转 90 度定位在 div 内