要素のスクロール率は、視点に入るとすぐにどのように計算できますか?jQuery - エレメントにスクロールする割合を計算します。
源のカップルからのコードのマイ組み合わせ:
$(document).ready(function(){
var initY = $('.scrollratio').offset().top
var height = $('.scrollratio').height()
var endY = initY + $('.scrollratio').height()
$(window).scroll(function(){
var scroll = $(window).scrollTop()
var visible = isVisible(document.getElementById("demo"))
console.log(visible)
if (visible) {
console.log('in view')
} else {
console.log('out of view')
}
if(visible){
var diff = scroll - initY
var ratio = Math.round((diff/height) * 100)
$('#note').text(ratio)
}
})
})
// Check if the element is in the viewport.
// http://www.hnldesign.nl/work/code/check-if-element-is-visible/
function isVisible(node) {
// Am I visible?
// Height and Width are not explicitly necessary in visibility detection, the bottom, right, top and left are the
// essential checks. If an image is 0x0, it is technically not visible, so it should not be marked as such.
// That is why either width or height have to be > 0.
var rect = node.getBoundingClientRect()
return (
(rect.height > 0 || rect.width > 0) &&
rect.bottom >= 0 &&
rect.right >= 0 &&
rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.left <= (window.innerWidth || document.documentElement.clientWidth)
)
}
* {
padding: 0;
margin: 0;
}
body, html {
height: 100%;
margin: 0;
font: 400 15px/1.8 "Lato", sans-serif;
color: #777;
}
body {
background:#171717;
}
.section-1 {
width: 100%;
min-height: 100%;
}
.scrollratio {
height: 2000px;
background:red;
}
#note {
position: fixed;
top: 0;
left: 0;
color: #FFFFFF;
margin: 2em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="note" ></div>
<div class="section-1"></div>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<div class="scrollratio" id="demo"></div>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
要素(赤いボックス)はビューポートに入り、のみ取得したときにそれが負の値を取得要素の上部がウィンドウの上部を通過し始めるときの正の値。
任意のアイデアの正の値を取得する方法は、要素がビューポートに入るとすぐにですか?
EDIT:
$(document).ready(function(){
var initY = $('.scrollratio').offset().top
var height = $('.scrollratio').height()
var endY = initY + $('.scrollratio').height()
var wHeight = $(window).height();
$(window).scroll(function(){
var scroll = $(window).scrollTop()
var visible = isVisible(document.getElementById("demo"))
if(visible){
var diff = scroll + wHeight - initY
var ratio = Math.round((diff/height) * 100)
$('#note').text(ratio)
}
})
})
// Check if the element is in the viewport.
// http://www.hnldesign.nl/work/code/check-if-element-is-visible/
function isVisible(node) {
// Am I visible?
// Height and Width are not explicitly necessary in visibility detection, the bottom, right, top and left are the
// essential checks. If an image is 0x0, it is technically not visible, so it should not be marked as such.
// That is why either width or height have to be > 0.
var rect = node.getBoundingClientRect()
return (
(rect.height > 0 || rect.width > 0) &&
rect.bottom >= 0 &&
rect.right >= 0 &&
rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.left <= (window.innerWidth || document.documentElement.clientWidth)
)
}
* {
padding: 0;
margin: 0;
}
body, html {
height: 100%;
margin: 0;
font: 400 15px/1.8 "Lato", sans-serif;
color: #777;
}
body {
background:#171717;
}
.section-1 {
width: 100%;
min-height: 100%;
}
.scrollratio {
height: 2000px;
background:red;
}
#note {
position: fixed;
top: 0;
left: 0;
color: #FFFFFF;
margin: 2em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="note" ></div>
<div class="scrollratio" id="demo"></div>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
ありがとうございました! – laukok
それは私が推測するマイナーなバグを持っています - 赤いボックスが(セクション-1なしで)上にあるとき、それが得られる値は上記の10または40で始まり、0ではなく始まります。 – laukok
これは、この比率の目標に左右されます。ウィンドウの高さを含めると、divが画面の下から画面に入るとき(スクロールするとき)、比率が0になることが示されます。 'section-1'が削除されると、divはすでに画面の一番上に表示されているので、比率は> 0です。しかし、両方のニーズに「対応する」方法の1つは、' wHeight'を条件付きにすることです。 –