javascript - 在元素的 20% 之前添加一个滚动类

标签 javascript jquery html

我有这个函数,它在滚动到元素并进入 View 时执行,我想编辑它以在滚动到元素的 20% 之前执行。

JS:

function isScrolledIntoView(elem) {
  var centerY = Math.max(0, ((jQuery(window).height() - jQuery(elem).outerHeight()) / 2) +
    jQuery(window).scrollTop());
  var elementTop = jQuery(elem).offset().top;
  var elementBottom = elementTop + jQuery(elem).height();
  return elementTop <= centerY && elementBottom >= centerY;
}

jQuery(window).on("scroll resize", function() {
  jQuery(".element)").each(function(index, element) {
    if (isScrolledIntoView(element)) {
      jQuery(element).addClass("newClass");
    }
  });
});

HTML:

<div class='element'>New Class Will Be Added Before 20% Of This Div</div>

最佳答案

您必须计算20%元素 height然后从元素 offset 中减去它来自top使用$(this).offset().top

堆栈片段

jQuery(window).on("scroll resize", function() {
  jQuery(".element").each(function() {
    var percentage = ($(this).outerHeight() * 20) / 100;
    if (jQuery(window).scrollTop() > jQuery(this).offset().top - percentage) {
      jQuery(this).addClass("newClass");
    } else {
      jQuery(this).removeClass("newClass");
    }
  });
});
.element {
  height: 200px;
  width: 200px;
  background: red;
  color: #fff;
  margin: 0 auto 30px;
}

body {
  margin: 300px 0;
}

.element.newClass {
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='element'>New Class Will Be Added Before 20% Of This Div</div>
<div class='element'>New Class Will Be Added Before 20% Of This Div</div>
<div class='element'>New Class Will Be Added Before 20% Of This Div</div>
<div class='element'>New Class Will Be Added Before 20% Of This Div</div>
<div class='element'>New Class Will Be Added Before 20% Of This Div</div>

关于javascript - 在元素的 20% 之前添加一个滚动类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48759559/

相关文章:

javascript - React Hooks - 在 onClick 事件期间拼接更新状态遇到问题

javascript - 如何选择jstree中的根节点?

html - 我的媒体查询适用于我的 iphone 但不适用于浏览器调整大小

javascript - 如何在 ASP .NET MVC 中使用 javascript 或 jquery 移动 html 元素中的类属性?

javascript - 无法使用从一个路由到另一个路由的 react 引导表重定向到不同的页面

jQuery .slideRight 效果

html - Bootstrap 输入和选择 padding-left 跨浏览器问题

html - 登录表单输入未激活

javascript - 如何使用javascript实现这个计算

javascript - 使用 li 选择单选输入按钮?