javascript - Polymer - 获取位于 Shadow dom 中的 div 位置

标签 javascript polymer shadow-dom

我目前正在使用 Polymer 构建自定义元素。现在我想要一个位于我的自定义元素中的 div 来执行某个 onclick 函数,并且在该函数中我需要获取它相对于视口(viewport)的位置。

所以通常我会使用

var offsets = element.getBoundingClientRect();

现在在自定义元素中 - 假设我正在谈论的 div 具有 ID insideCard,因此它是

this.$.innerCard.onclick = function(){
alert("Test 1");
var offsets = this.$.innerCard.shadowRoot.getBoundingClientRect();
alert("Test 2");
....
} 

第一个警报正确触发,但第二个警报未正确触发。 Javascript 控制台给我一个类型错误:

Uncaught TypeError: Cannot read property 'innerCard' of undefined tile-story.html:37$.innerCard.onclick tile-story.html:37

有谁知道我如何访问 div 位置,或者我在这里做错了什么?

最佳答案

未定义错误是因为在onclick处理程序中,this与外部this不一样,所以如果你想使用this.$,你应该先绑定(bind)上下文:

 Polymer('tile-story', {
        ready: function() {
            this.$.innerCard.onclick = function() {
                var offsets = this.$.innerCard.getBoundingClientRect(); //ClientRect {height: 18, width: 1350, left: 8, bottom: 44, right: 1358…}
            }.bind(this);
        }
    });

关于javascript - Polymer - 获取位于 Shadow dom 中的 div 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684398/

相关文章:

javascript - 移动浏览器不支持 WebM 视频时的后备图像

javascript - 检查 JavaScript 数组中是否存在值

javascript - 进出代码点火器的加密和解密

css - 向 shadowDOM 中动态创建的样式表添加规则

javascript - 检查回调是否最后被触发的方法?

dart - 获取Dart Polymer元素资源URL

javascript - Polymer 无法在 Chrome 中工作(在 Firefox 中工作)

落 Dart polymer 结合性能

shadow-dom - 如何将选项标签作为分布式节点传递给自定义元素(又名 <slot></slot>)

javascript - 如何在没有 Shadow DOM 的情况下创建 LitElement?