- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个 Angular Directive(指令)来跟踪大量内容中的每个段落。当页面中的内容是静态的时,它工作正常。当内容由 API 提供时,getBoundingClientRect 总是为我的占位符返回零。在查看之前我会重新编译。如何为动态内容中的指令计算 getBoundingClientRect?
我的内容:
<p storytracker="261">"He don't look to have taken much harm." said Mrs. White politely.</p>
在我的指令中:
angular.module('web')
.directive('storyTracker', storyTracker);
function storyTracker($compile) {
var directive = {
restrict: 'EA',
transclude: true,
scope: {
sid: '='
},
link: function(scope, elem, attrs) {
//Check if element is in viewport on page load
if (isElementInViewport(elem[0])) {
//Element is in view port
}
//Check if element is in viewport on page scroll
var page = angular.element(window);
page.bind('scroll', function() {
if (isElementInViewport(elem[0])) {
//Element is in view port
}
});
}
};
return directive;
}
function ifElementinviewport(el) {
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
最佳答案
尝试一些事情:
--将方法调用推送到超时包装器中
$timeout( ifElementinviewport, 0 ).then( function(isElementInViewPortFlag) {
//if condition checking
});
这将等到渲染引擎完成执行,这可能会解决您的问题。
您也可以尝试将执行包装在“就绪”包装器中,例如:
angular.element(elem).ready(function () {
//elem is the div which holds the dynamic content
});
--如果这也不起作用,那么您将必须从加载内容的服务获得回调并执行发布后的操作。
关于javascript - getBoundingClientRect 在运行时为 Angular Directive(指令)返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403448/
我有一个在 windows-resize 事件上运行的 JS 函数 在该函数中,我设置了一个变量 width 以用于调整 d3 图表的大小。如果我“手动”调整窗口大小(即:拖动窗口边缘之一),宽度变量
我有一个 ClientRect 对象数组,这是我通过做得到的 var trackedElements = $('[track]'); var trackedBounds = []; _.each(tr
我正在使用 document.body.getBoundingClientRect().right 来查找顶部导航中的所有元素都在 View 之外,以便隐藏它们并将它们放在“更多”下拉列表下。但这个功
我一直在尝试使用一个函数来检测元素是否在视口(viewport)中: function isElementInViewport (el) { var rect = el[0].getBound
所以 jQuery 的 .width() always returns the clientWidth ,不管它是什么。但如果你想要亚像素精度,you have to opt for getBound
这里有一些有趣的东西:在任何 JS 窗口中运行: val = document.body.getBoundingClientRect(); console.log(val) val.left += 1
我对 DOMnode.getBoundingClientRect() 有疑问,因为返回的数据不一致。我正在使用 windows.onload(因为缺少更好的选择)来触发我的函数,该函数采用元素的 ge
下面的代码有什么问题吗? getBoundingClientRect 值并不总是相同,当我滚动后触发该函数时它会发生变化。如果我没有滚动页面,下面的函数才准确(滚动到正确的位置)。 scrollToT
我正在使用 getBoundingClientRect 来了解元素是否在页面中的特定点之上。所以我这样做: var rect = el.getBoundingClientRect(); if (rec
我正在为 ChartJS 使用自定义工具提示并定位工具提示,我需要使用 getBoundingClientRect 来获取图表的位置,然后相对于该位置移动工具提示。但是,从 getBoundingCl
我正在进入 div 元素的控制台顶部、左侧、右侧、底部属性: var offSet = document.getElementById("div").getBoundingClientRect();
我正在尝试向我的网站添加粘性导航,当它滚动到不同的部分时会发生变化。当滚动到带有 .dark 类的部分时,它应该将 Logo 和文本颜色更改为白色……否则为黑色。 下面是我一直在使用的 javascr
我已经在使用 getBoundingClientRect() 将子元素 wrt 的 getBoundingClientRect() 计算为 px 中的父元素并从一个组件传递到另一个组件,并且能够将子元
我正在使用 getBoundingClientRect函数并试图理解它的 top 行为。负顶是什么意思? 在下面的示例中,当您向下滚动时,top 的值变为负值。有人可以解释一下,我如何解释 getBo
这个问题在这里已经有了答案: How best to convert a ClientRect / DomRect into a plain Object (6 个答案) 关闭 3 年前。 func
getBoundingClientRect() 返回元素在 转换后屏幕上的坐标。如何在转换之前 计算这些坐标?即没有转换。 我发现的最简单的方法是: element.style.transform =
我构建了一个组件,该组件将根据其尺寸和在窗口中的位置确定其打开方向。我在 react-dom 节点上使用了 getBoundingClientRect() 函数。现在我已经更新了一些项目包,包括 re
也许这是个愚蠢的问题。 getBoundingClientRect() 返回什么类型?我有以下错误: var logo1: HTMLElement = document.getElementById(
背景:我目前正在开发一个项目,我的 JS 应用程序被嵌入到多个其他(父)JS 应用程序中。某些父应用程序可以通过将 display:block/none 设置为包含我的应用程序的某些元素来显示/隐藏我
我正在尝试获取图像上鼠标单击的坐标。所以我像这样使用 getBoundingClientRect function showCoords(canvas, event) { var rect =
我是一名优秀的程序员,十分优秀!