メディアクエリで垂直スクロール距離を検出する方法はありますか?
メディアクエリは、メディアの検出(衝撃的な右:P)を中心に設計されているため、ブラウザの高さなどをテストできますが、ページをどれだけ下にスクロールしたかはわかりません。
可能ではないが、JS(jQueryではない)の方法を知っている場合は、遠慮なく投稿してください!
CSSメディアクエリでは可能ではないと思いますが、JavaScriptでwindow.pageYOffset
を使用してスクロールの高さを確認できることは知っています。ユーザーがページを上下にスクロールするたびにこの値を関数で実行したい場合は、次のようにします。
window.onscroll = function() {
scrollFunctionHere(window.pageYOffset);
};
あるいは単に:
window.onscroll = scrollFunctionHere;
関数自体がwindow.pageYOffset
の値をチェックした場合。
JavaScriptでwindow.onscroll
を効率的に使用する方法の詳細については、 mynameistechnoの回答 を参照してください。
効率に関する重要な注意:スクロールイベントが発生するたびに関数を実行すると、コールバックで重要でないものが実行されると、CPUサイクルが中断する可能性があります。代わりに、1秒間に何度もコールバックを実行できるようにすることをお勧めします。これは「デバウンス」と呼ばれています。
以下の簡単なデバウンススクロールイベントハンドラーコード。テキストが1フレームごとではなく、250ミリ秒ごとに "HELLO"と "WORLD"を切り替える方法に注意してください。
var outputTo = document.querySelector(".output");
var timeout_debounce;
window.addEventListener("scroll", debounce);
function debounce(event) {
if(timeout_debounce) {
return;
}
timeout_debounce = setTimeout(clearDebounce, 250);
// Pass the event to the actual callback.
actualCallback(event);
}
function clearDebounce() {
timeout_debounce = null;
}
function actualCallback(event) {
// Perform your logic here with no CPU hogging.
outputTo.innerText = outputTo.innerText === "HELLO"
? "WORLD"
: "HELLO";
}
p {
padding: 40vh;
margin: 20vh;
background: blue;
color: white;
}
<p class="output">Test!</p>
まず、受け入れられた回答が機能しません。
正しい名前は
window.onscroll
ではなく
window.onScroll
https://developer.mozilla.org/en-US/docs/Web/API/window.onscroll
第2に、関数は必要以上に呼び出され、スクロールするとページが遅れる可能性があるため、これはひどく非効率的です。 John Resigから:
http://ejohn.org/blog/learning-from-Twitter/
150ミリ秒ごとに実行されるタイマーを使用する方がはるかに優れています。
var scrolled = false;
window.onscroll = function() {
scrolled = true;
}
setInterval(function(){
if (scrolled) {
scrolled = false;
// scrollFunction()
}
}, 150);
Jqueryにはメソッド.scrollTop()があります
http://api.jquery.com/scrolltop/
この例では、ウィンドウをスクロールしてdivをスクロールします。
$(window).scroll(function(){
$("div").css("margin-top", $(window).scrollTop())
});