相关疑难解决方法(0)

如何检查jQuery中是否隐藏了一个元素?

是可能的切换元件的可见性,使用函数.hide(),.show().toggle().

如何测试元素是可见还是隐藏?

javascript jquery dom visibility

7481
推荐指数
53
解决办法
255万
查看次数

如何判断DOM元素在当前视口中是否可见?

是否有一种有效的方法来判断DOM元素(在HTML文档中)当前是否可见(出现在视口中)?

(关于Firefox的问题)

html javascript browser firefox dom

878
推荐指数
18
解决办法
46万
查看次数

如何使用JavaScript检查元素是否真的可见?

在JavaScript中,您如何检查元素是否实际可见?

我不仅仅意味着检查visibilitydisplay属性.我的意思是,检查元素不是

  • visibility: hidden 要么 display: none
  • 在另一个元素下面
  • 滚动屏幕边缘

由于技术原因,我不能包含任何脚本.然而,我可以使用原型,因为它已经在页面上.

javascript dom visibility

117
推荐指数
3
解决办法
13万
查看次数

滚动到时播放HTML5视频

无论如何只有当用户在浏览器视口中拥有视频(或视频的某个百分比)时才能自动播放HTML5视频?

javascript video jquery html5 html5-video

23
推荐指数
4
解决办法
4万
查看次数

当getBoundingClientRect正确时,clientWidth和clientHeight报告为零

在MDN的Element.clientWidth描述中,它说.

注意:我已经根据@potatopeelings答案更新了MDN .

Element.clientWidth属性是元素的内部宽度(以像素为单位).它包括填充但不包括垂直滚动条(如果存在,如果呈现),边框或边距.

此属性将值舍入为整数.如果需要小数值,请使用element.getBoundingClientRect().

据我所知,除了四舍五入以外,clientWidth应该是相同的getBoundingClientRect().width.

但是我看到了很多的元素(其中displayinline?)的clientWidth(和高度)为零,而通过值返回getBoundingClientRect似乎是正确的.

在stackoverflow上搜索会带来一些答案,说明在文档准备好之前就会发生这种情况状态但我一直看到这一点,而不仅仅是在页面加载时.

这种行为对于我检查过的所有浏览器都是一致的,在哪里指定这应该是行为?

样品:

function str(name, width, height) {
  return name + ': (' + width + ', ' + height + ')';
}

function test() {
  var s = document.getElementById('s');
  var rect = s.getBoundingClientRect();
  document.getElementById('out').innerHTML =
    str('client', s.clientWidth, s.clientHeight) + '<br/>' +
    str('bounding', rect.width, rect.height);
}
Run Code Online (Sandbox Code Playgroud)
 <span id="s">A span</span><br/> <button onclick="test()">Test</button>
<hr /> …
Run Code Online (Sandbox Code Playgroud)

html javascript css

17
推荐指数
2
解决办法
2万
查看次数

有效地获得元素的可见区域坐标

StackOverflow的是装载 问题有关如何检查元素是否在检视真正可见的,但它们都寻求一个布尔答案.我有兴趣获得元素的可见实际区域.

function getVisibleAreas(e) {
    ...
    return rectangleSet;
}
Run Code Online (Sandbox Code Playgroud)

更正式地说 - 元素的可见区域是CSS坐标中的一组(最好是非重叠的)矩形,elementFromPoint(x, y)如果点(x,y)包含在(至少)一个矩形中,它将返回元素.集合.

在所有DOM元素(包括iframe)上调用此函数的结果应该是一组非重叠区域集,其中union是整个视口区域.

我的目标是创建一种视口"转储"数据结构,它可以有效地为视口中的给定点返回单个元素,反之亦然 - 对于转储中的给定元素,它将返回可见的集合区域.(数据结构将传递给远程客户端应用程序,因此当我需要查询视口结构时,我不一定能访问实际文档).

实施要求:

  • 显然,实现应该考虑元素的hidden状态z-index,页眉和页脚等.
  • 我正在寻找适用于所有常用浏览器的实现,尤其是移动设备 - Android的Chrome和iOS的Safari.
  • 最好不要使用外部库.

    当然,我可能天真并且elementFromPoint在视口中调用每个离散点,但是性能是至关重要的,因为我迭代所有元素,并且会经常这样做.

    请指导我如何实现这一目标.

    免责声明:我对网络编程概念很不错,所以我可能使用了错误的技术术语.

    进展:

    我想出了一个实现.算法非常简单:

    1. 迭代所有元素,并将其垂直/水平线添加到坐标图(如果坐标位于视口内).
    2. 为每个"矩形"中心位置调用`document.elementFromPoint`.矩形是来自步骤1的地图中的两个连续垂直坐标和两个连续水平坐标之间的区域.

    这会产生一组区域/矩形,每个区域/矩形指向一个元素.

    我的实施问题是:

    1. 对于复杂的页面来说效率很低(对于非常大的屏幕和gmail收件箱,最多可能需要2-4分钟).
    2. 它每单个元素产生大量的矩形,这使得通过网络进行字符串化和发送效率低下,并且使用起来也不方便(我希望最终得到每个元素尽可能少的矩形集合).

    尽我所知,这个elementFromPoint电话需要花费很多时间才能使我的算法相对无用......

    有谁能建议更好的方法?

    这是我的实现:

    function AreaPortion(l, t, r, b, currentDoc) {
        if (!currentDoc) currentDoc = document;
        this._x = l;
        this._y = t;
        this._r = r;
        this._b = b;
        this._w …
    Run Code Online (Sandbox Code Playgroud)
  • html javascript css jquery visibility

    15
    推荐指数
    1
    解决办法
    4337
    查看次数

    什么会使offsetParent null?

    我试图在JavaScript中进行定位.我正在使用基于经典quirksmode函数的累积位置函数,该函数对每个函数求和offsetTop,直到顶部节点.offsetLeftoffsetParent

    但是,我遇到了一个问题,我感兴趣的元素offsetParent在Firefox 中没有.在IE中offsetParent存在,但是offsetTop并且offsetLeft总计为0,因此它与Firefox中的效果相同.

    什么会导致在屏幕上清晰可见和可用的元素没有offsetParent?或者,更实际的是,我如何找到该元素的位置以便在其下方放置下拉?

    编辑:这是如何重现这个特定的一个实例(没有通过当前接受的答案解决):

    1. 打开Stack Overflow主页.
    2. 在Web浏览器的控制台中运行以下代码(例如Chromev21):

      var e = document.querySelector('div');
      console.log(e);
      // <div id="notify-container"></div>
      do{
        var s = getComputedStyle(e);
        console.log(e.tagName,s.display,s.visibility,s.position,e.offsetParent);
      } while(e=e.parentElement)
      // DIV block visible fixed null
      // BODY block visible static null
      // HTML block visible static null
      
      Run Code Online (Sandbox Code Playgroud)

    为什么offsetParent那个元素null

    html javascript positioning

    13
    推荐指数
    3
    解决办法
    2万
    查看次数

    使用display:none parent读取scroll的scrollHeight

    使用隐藏div的父级元素.divdisplay:none

    • 我正在将jQuery textarea元素转储到控制台.我看到scrollHeight第0个元素的属性是88.
    • 我尝试将此属性读取到var(使用$(element)[0].scrollHeight或者$(element).prop('scrollHeight')我正在获取0.

    我还尝试在读取之前设置textareato position: absolutedisplay: blockwith jQuery,结果相同.

    我该如何正确阅读该属性?

    html jquery

    12
    推荐指数
    2
    解决办法
    3205
    查看次数

    如何使用Puppeteer和纯JavaScript检查元素是否可见?

    我希望检查一下使用Puppeteer和纯JavaScript(不是jQuery)可以看到DOM元素,我该怎么做?通过可见我的意思是元素通过CSS显示,而不是隐藏(f.ex.by display: none).

    例如,我可以#menu通过display: none以下方式确定我的元素是否未通过CSS规则隐藏:

    const isNotHidden = await page.$eval('#menu', (elem) => {
      return elem.style.display !== 'none'
    })
    
    Run Code Online (Sandbox Code Playgroud)

    如何确定元素是否隐藏,而不仅仅是通过display: none

    javascript css puppeteer

    8
    推荐指数
    5
    解决办法
    1万
    查看次数

    使用量角器搜索包含特定文本的转发器中的元素

    如何从包含特定文本的转发器中搜索元素?

    我尝试过这样的事情:

    element(by.repeater('item in array')).all(by.cssContainingText('.xyz','my item title')); // only gets the first element
    
    Run Code Online (Sandbox Code Playgroud)

    我可以自己搜索使用.then,element.all但我想知道它是否存在更简单的东西,cssContainingText但对于中继器:

    element(by.repeaterContainingText('item in array','my item title'))
    
    Run Code Online (Sandbox Code Playgroud)

    或者像这样链接的元素:

    element.all(by.repeater('item in array')).element(by.cssContainingText('.xyz','my item title'));
    
    Run Code Online (Sandbox Code Playgroud)

    带过滤器的解决方案(但速度很慢)

    element.all(by.repeater('item in array')).filter(function(elem){
        return elem.getText().then(function(text){
            return text.indexOf('my item title') > -1;
        });
    }).then(function(filteredElements) {
        return filteredElements[0];
    })
    
    Run Code Online (Sandbox Code Playgroud)

    protractor

    7
    推荐指数
    1
    解决办法
    1万
    查看次数