当前位置: 首页 > 知识库问答 >
问题:

使div固定时防止动画跳转

娄建义
2023-03-14

我正在制作一个浮动div效果,当向下滚动时,div将移动到上下。问题是,当您向下滚动并单击按钮使div固定时,动画只是跳出了顺序。它应该更平滑地移动到旧位置。

<div id="container">
  <button id="toggleFix" onclick="document.querySelector('#element').classList.toggle('fixed')">Make the div fixed</button>
  <div id="element"></div>
</div>

js:

var el = document.querySelector("#element"),
elPos = el.getBoundingClientRect();

el.style.left = elPos.left + "px";
el.style.right = elPos.right + "px";
el.style.top = elPos.top + "px";
el.style.bottom = elPos.bottom + "px";

https://codepen.io/anon/pen/ajWaaM

var el = document.querySelector("#element"),
  elPos = el.getBoundingClientRect();

el.style.left = elPos.left + "px";
el.style.right = elPos.right + "px";
el.style.top = elPos.top + "px";
el.style.bottom = elPos.bottom + "px";
body {
  height: 150vh;
}

#container {
  max-width: 1200px;
  margin: auto;
}

#toggleFix {
  margin-bottom: 1em;
  font-size: 20px;
  border: none;
  padding: 10px 20px;
  font-weight: bold;
  position: fixed;
  right: 20px;
  bottom: 0;
}

#element {
  background: black;
  transition: all 0.3s ease;
  width: 400px;
  height: 300px;
}

#element.fixed {
  position: fixed;
  top: 845px !important;
  left: 10px !important;
  right: auto !important;
  bottom: 10px !important;
  width: 200px !important;
  height: 150px !important;
}
<div id="container">
  <button id="toggleFix" onclick="document.querySelector('#element').classList.toggle('fixed')">Make the div fixed</button>
  <div id="element"></div>
</div>

共有2个答案

张丁雷
2023-03-14

为了有效地转换位置,必须至少设置四个位置中的一个(顶部、左侧、右侧或底部)。

另外,我认为你不需要JS。我在没有js的情况下实现了这一点。

这是可以玩的密码笔

body{
 height: 150vh; 
}
#toggleFix {
  margin-bottom: 1em;
  font-size: 20px;
  border: none;
  padding: 10px 20px;
  font-weight: bold;
  position: fixed;
  right: 20px;
  bottom: 0;
}
#element{
  position: absolute;
  top: 8px;
  left: 450px;
  background: black;
  width: 400px;
  height: 300px;
  transition: all 0.3s ease;
}
#element.fixed{
  position: fixed;
  top: 845px ;
  left: 10px ;
  right: auto ;
  bottom: 10px ;
  width: 200px ;
  height: 150px ;
}
html prettyprint-override"><div id="container">
  <button id="toggleFix" onclick="document.querySelector('#element').classList.toggle('fixed')">Make the div fixed</button>
  <div id="element">
  </div>
</div>

苍志文
2023-03-14

当前,您正在将元素移出屏幕(top:845px!important)。

将其替换为top:auto!重要信息会将元素移动到左下角,即使在滚动时它也会留在那里。

注意:这可能/将影响页面布局的其余部分。

 类似资料:
  • 问题内容: 我正在尝试在网络上进行搜索,但不确定要查找的内容是什么。我试图找出如何创建将被修复的div元素,或者仅在该元素的TOP达到窗口浏览器视图的TOP时才浮动。例如,如果某个元素位于页面的中间,那么当您继续向下滚动时,该元素将一直保留直到它即将消失,然后它才希望保留在我的浏览器顶部(固定)。 问题答案: 我想我正在做与您想做的事情类似的事情。试用以下代码,将所需的内容放入通知div中,并单独

  • 问题内容: 我已经在SO上看到了几次这样的问题,并且给出了相同的答案,但这些答案在我的Chrome或Firefox中不起作用。 我想让一组左浮动div开始运行,水平放置一个带有水平滚动条的父div。 我可以在这里演示如何使用此糟糕的嵌入式CSS 但是,从SO *给出的答案来看,这应该可行,但对我而言却不可行。 有没有一种方法可以定义每个项目的绝对位置呢? eg [防止浮动的div包装到下一行 问题

  • 问题内容: 滚动到该位置后如何使它固定?我在页面的后面有一个,您需要滚动到那个页面。 如果我使用: 在出现之前就应该正常显示。我需要的一个很好的例子是9gag上的第二个广告。如果屏幕分辨率足够低,则在加载首页后您将看不到该广告,但是向下滚动后,您会看到第二个广告,并且在向下滚动时它将保持固定。 问题答案: 我知道这仅被标记为html / css,但是您不能仅使用css来做到这一点。最简单的方法是使

  • 在positon=fixed的div上,我似乎无法滚动页面。 当我使用下面的代码时: 在overlay(类名)div中,它不起作用,因为overlay div有一个固定的位置。

  • 我有一个内部滚动条的div组件,我想防止向上/向下箭头键在元素聚焦时滚动(鼠标单击元素),因为它们用于其他事件(例如缩放)。 我找到的唯一解决方案是将事件侦听器附加到文档,但是,它禁用所有默认的箭头键事件,例如在输入字段中移动光标。 以下是一个示例(在React中):https://codesandbox.io/s/rsc-live-example-fze6z 如何复制: 用鼠标点击内部div(有

  • 本文向大家介绍js防止DIV布局滚动时闪动的解决方法,包括了js防止DIV布局滚动时闪动的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js防止DIV布局滚动时闪动的方法,分享给大家供大家参考。具体方法如下: 最近接触页面性能的东西,有很多细微又原始的内容,比如浏览器渲染。资料非常多,所以选一些做节译,备忘。 JavaScript多次写、读DOM就会发生「布局颠簸」,引起文档重排