- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我从 How to tell if a DOM element is visible in the current viewport? 得到了一个检查元素是否在 View 中的方法。 .并尝试运行测试以检查元素是否在 View 中
var visibleY = function (el) {
var top = el.getBoundingClientRect().top, rect, el = el.parentNode;
do {
rect = el.getBoundingClientRect();
if (top <= rect.bottom === false) return false;
el = el.parentNode;
} while (el != document.body);
// Check its within the document viewport
return top <= document.documentElement.clientHeight;
};
但是对于所有低于父元素的客户端高度值的元素,它都返回 true。使这项工作需要进行哪些更改。 Fiddle
最佳答案
以下答案来自that question如果你删除了 jQuery cruft(如果你没有名为 jQuery 的全局变量,它会抛出一个错误):
[deleted code]
根据 OP 中链接的各种答案,以下似乎有效,只是经过轻微测试但它在 OP's fiddle 中有效.它检查元素是否在其父元素和视口(viewport)中。希望评论足够了:
// Return true if an element overlaps its parents and the viewport
function isVisible(element) {
return isInParents(element) && isInViewport(element);
}
// Return true if an element overlaps its parents
function isInParents(el) {
var rect = el.getBoundingClientRect(),
rectP,
visible = true;
while (el && el.parentNode && el.parentNode.getBoundingClientRect && visible) {
el = el.parentNode;
rectP = el.getBoundingClientRect();
visible = rectInRect(rectP, rect);
}
return visible;
}
// Return true if element overlaps the viewport
function isInViewport (element) {
var rect = element.getBoundingClientRect();
return rectInRect({top:0, left:0,
bottom: window.innerHeight || document.documentElement.clientHeight,
right: window.innerWidth || document.documentElement.clientWidth
}, rect);
}
// Return true if r1 overlaps r0
function rectInRect(r0, r1) {
return r1.top < r0.bottom &&
r1.bottom > r0.top &&
r1.left < r0.right &&
r1.right > r0.left;
}
元素是否可见取决于其他因素,例如重叠元素是否被隐藏,或者其他非祖先元素是否位于顶部等。这些条件可以检查但是它您必须检查的越多,效率就会越来越低。
如果彻底性和性能很重要,请为页面上所有元素的空间位置创建一个二叉树索引,并随时更新它。创建索引很慢,但检查位置会快得多。
关于javascript - 调整元素的 InView 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25779234/
在第一个代码中,如果您单击LIKE,它将向事件部分添加一个类.loved:.section .active。 (.active 类由 fullpage 插件自动添加到可见部分)。 在这里您可以看到 I
import SpriteKit import UIKit import Foundation class GameScene: SKScene { let coin = Coin() ove
我在一个页面上有多个部分,其 id 类似于 ss-section-story ss-section-problem ss-section-solution 和我试图跟踪每个部分何时进入和退出视口(vi
我从 How to tell if a DOM element is visible in the current viewport? 得到了一个检查元素是否在 View 中的方法。 .并尝试运行测试
我正在使用这种方法: - (void)setTranslation:(CGPoint)translation inView:(UIView *)view 来自 UIPanGestureRecogniz
我想将以下代码转换为纯 JavaScript。 $(function () { $('h2,.single').on('inview', function () { $(thi
我想知道如何操作 inview.js 脚本,它被触发的时刻不是视口(viewport)中的第一个像素,最后一个是元素熄灭的时刻,而是例如晚或早 50 像素。inview.js 的脚本是 (functi
QGraphicsView::fitInView()似乎忽略了显然被覆盖的滚动条的存在。 (它还使用硬编码的 2 像素边距。) 有一个相关的错误报告 (https://bugreports.qt-pr
我正在使用类似这样的东西来捕获网页上的滚动事件: var myblock = new Waypoint.Inview({ element: $('#block')[0], entere
该方法的文档说:“在指定位置弹出菜单。”但参数似乎描述了不同的情况: item The menu item to be positioned at the specified location in
我正在尝试使用 Velocity.js 和 jquery.inview,我希望我页面上的所有标题在出现时都滑入 View 。此代码适用于第一个标题: $('.movies-title').bind('
我目前正在一个仅限 iOS6 的应用程序中实现自动状态保存/恢复。 为了恢复 TableView ,我将 UIDataSourceModelAssociation 协议(protocol)添加到我的
i 动态生成 pdf..我根据从数据库检索的字符串制作页面.. 当我在 webview 中打开该 pdf 时...但是当我放大缩小 pdf 时..我收到内存警告和另一个警告“由于手势识别器未激活而忽略
我一直在孜孜不倦地寻找一个脚本,当用户向下滚动页面时,内容就会被加载。 我有一个页面,其中包含跨页面的多个图像,并且希望使用此脚本来加快初始页面加载速度。页面上的内容是静态的,因此我希望在滚动时将内容
我在我的 tableview 中显示自定义 UIMenuController 但问题是它显示在中心我想将它显示在橙色的 label 之上。为了显示在 label 之上,我做了这个 [menu setT
我有一个自定义的 NSPopUpButtonCell,我正在尝试覆盖 drawImage:withFrame:inView。奇怪的是,drawImage 方法从未被调用,但图像出现在屏幕上。我缺少什么
我有一个按钮,在按钮的操作方法中,我使用-popUpMenuPositioningItem:atLocation:inView:以编程方式创建一个菜单。 . 如何获取用户选择的菜单项?如果我用 NSP
我正在开发一个需要在各种场景下在屏幕上显示上下文菜单的应用程序。在我正在编写的函数中,我无权访问任何 NSWindows 或 NSView。我想使用 popUpMenuPositioningItem:
我正在尝试自定义一个名为 wp post Listing 的 WordPress 插件。我想定位包装加载更多按钮的#basic-waypoint-cyberwrath,因为该插件没有自动化。它需要手动
我正在开发一个无停靠应用程序(LSUIElement true)。当用户单击相应的 NSStatusItem 或使用键盘快捷键时,应用程序会弹出一个菜单。 我的问题是,每当用户切换到另一个应用程序(使
我是一名优秀的程序员,十分优秀!