javascript - 根据页面滚动取消固定元素

标签 javascript jquery css sticky

我的网站上有一个计算器(用 php 编写),在这个计算器的末尾有一个包含结果的 div。

在桌面上它工作正常,但在移动设备上,我想将结果 div 固定到底部,直到滚动 div 的原始位置。之后我想将其位置更改为静态。

换句话说,页面上有一个固定的(到底部的)元素,滚动后,在div的原始位置,我想取消粘贴。

我希望,这是可以理解的,但是有一个 example page - 看手机版!!!

我该怎么做?

提前致谢!

最佳答案

这是我过去的做法:

  1. 获取元素底部的原始位置。
  2. 获取视口(viewport)的高度。
  3. 从原始底部位置减去视口(viewport)高度,得到窗口需要滚动到的位置,以便显示完整元素。
  4. 向窗口添加滚动监听器以检查滚动位置并相应地添加/删除固定类。

例子:

// Get the document element to use later.
var doc = document.documentElement;

// Get your important message.
var importantMsg = document.getElementById('important-msg');

// Find out how far the bottom of our message is from the top of the page while it's not fixed.
var originalMsgBottom = importantMsg.getBoundingClientRect().bottom;

// Get the window height.
var windowHeight = Math.max(doc.clientHeight, window.innerHeight || 0);

// Get the scroll position we need to check for while srolling.
var scrollPosition = originalMsgBottom - windowHeight;

// Now make your message fixed by default.
importantMsg.className = 'important-msg-fixed';

// Create the function to get the current scroll and see if it is greater than or equal to the position we defined earlier.
var scrollFunction = function() {
	var scrollTop = (window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0);
  if (scrollTop >= scrollPosition) {
    importantMsg.className = ''; // If it is, remove the fixed class.
  } else {
    importantMsg.className = 'important-msg-fixed'; // If it's not, then add it.
  }
}

// Make our function run everytime the window is scrolled.
window.addEventListener('scroll', scrollFunction);
#important-msg {
  background: #f00;
  color: #fff;
  padding: 10px;
}
.important-msg-fixed {
  position: fixed;
  right: 0;
  bottom: 0;
  left: 0;
  margin: 0;
}
<h1>Lorem Ipsum</h1>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p>Scroll Down</p>
<p id="important-msg">Important Message</p>
<p>More Stuff</p>
<p>More Stuff</p>
<p>More Stuff</p>
<p>More Stuff</p>
<p>More Stuff</p>
<p>More Stuff</p>
<p>More Stuff</p>
<p>More Stuff</p>
<p>More Stuff</p>

关于javascript - 根据页面滚动取消固定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48346105/

相关文章:

javascript - jQuery 可以给我一个按类名排除某些子标签的子级列表吗?

javascript - 更新对象的 redux 数组但不重新渲染组件

javascript - Jquery删除基于文本输入的选择选项

javascript - 反转空终止字符串的代码

javascript - 如何在 Handlebars 中设置 (!)?

javascript - IE9 上的 Bootstrap

javascript - 当幻灯片到达末尾时从第一张图像开始

jQuery.append 函数最后给了我 NaN

javascript - 在 HTML 中悬停弹出消息

html - 如何使用 imgs 获得响应相等的边界?