0

基本的に、スクロールバー(垂直または水平)を持つページ上のすべての要素を見つける必要があります

要素にスクロールバーがあり、実際にスクロールできるかどうかを確認する方法は? jsperf でこのコード スニペットを見つけました。コードの背後にあるロジックを XPath 式に取り込むことは可能ですか? または、スクロールバーを確認する他の方法はありますか?

追加した:

私がやろうとしていることを説明するために: 私はVimFx - Firefox の拡張機能を開発しています。基本的には、Vim スタイルのマウスレス ショートカットを導入します (Vimperator と Pentadactyl があることは知っています...)。実装したい機能の 1 つは、j/k キーでスクロールされるコンテナーを選択できるようにすることです。そのため、特定のランダムなページですべてのスクロール可能な要素を検出する必要があります。

4

2 に答える 2

0

divのオーバーフローが「スクロール」に設定されていることをjavascriptで確認できます

document.getElementById(elementId).style.overflow == "scroll";

私はすべての要素でそれを確認します。すべての要素が div の場合は、次を使用します。

var allElements = document.getElementsByTagName("div");
for(index in allElements) {
  var element = allElements[index];
  if (element.style.overflow == "scroll" || element.style.overflowX == "scroll" || element.style.overflowY == "scroll"){
    //do something
  }
}
于 2012-11-15T13:41:40.917 に答える
0

VimFx でスクロール可能な要素を検出するためのサポートを実装しました。

この問題を解決する鍵は、Mozilla 固有のイベントオーバーフローアンダーフローを使用することです。

コンセプトは次のとおりです。

// The function used for the overflow event:
function(event) {
  // `window` is a reference to the current window.
  var computedStyle = window.getComputedStyle(event.target)
  // `overflow: hidden` can cause overflow, but without a scrollbar, so
  // exclude such elements
  if (computedStyle && computedStyle.getPropertyValue('overflow') == 'hidden') {
    return
  }
  // `scrollableElements` is a reference to a `WeakMap` object for the
  // current window.
  scrollableElements.set(event.target)
}

// The function used for the underflow event:
function(event) {
  scrollableElements.delete(event.target)
}

// Somewhere else in the code we can now get a suitable `scrollableElements`
// object and check if elements are present in it.
if (scrollableElements.has(someElement)) {
  // `someElement` is scrollable!
}
于 2015-01-26T16:48:51.720 に答える