先端のぶれと節流を防ぎます.
16042 ワード
1.手ぶれ防止
JSのジッタとは、ユーザーがある状態で、
ですから、私達はお客様にすべてのジッタを停止させてから、いくつかのコードを実行します.
よくあるのは震え防止のイベントタイプがあります.oncroll/onmouseer/onmousemoveなどです.
ex:oncroll事件を例にして
節流とは、ある場面によってはユーザのある状態において、あるイベントの結果を持続的に獲得する必要があるため、ユーザにこのイベントを継続的にトリガさせることはできない.
ex:以下はやはりoncroll事件を例にしています.ユーザーがスクロールバーを上に引っ張る時と下に引っ張る時は、ずっとoncroll事件を触発しますが、私達は1000 msごとにOcrollイベントの結果を得ます.
JSのジッタとは、ユーザーがある状態で、
あるイベントを指します.例えば、スクロールバーをスライドさせる時に、oncrollイベントがずっとトリガされます.ですから、私達はお客様にすべてのジッタを停止させてから、いくつかのコードを実行します.
よくあるのは震え防止のイベントタイプがあります.oncroll/onmouseer/onmousemoveなどです.
ex:oncroll事件を例にして
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> title>
<style>
.div {
height: 2000px;
}
style>
head>
<body>
<div class="div">div>
<script>
//
// 2 :
function fangdou (time, callback) {
var timer // timer
return function () {
clearTimeout(timer)
timer = setTimeout(() => {
callback()
}, time)
}
}
window.onscroll = fangdou(500, () => {
console.log('onscroll')
})
script>
body>
html>
2.スロットル節流とは、ある場面によってはユーザのある状態において、あるイベントの結果を持続的に獲得する必要があるため、ユーザにこのイベントを継続的にトリガさせることはできない.
ex:以下はやはりoncroll事件を例にしています.ユーザーがスクロールバーを上に引っ張る時と下に引っ張る時は、ずっとoncroll事件を触発しますが、私達は1000 msごとにOcrollイベントの結果を得ます.
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> title>
<style>
body {
height: 2000px;
}
style>
head>
<body>
<script>
//
// function jieliu () {
// var beginTime = Date.now()
// var timer
// return function () {
// clearTimeout(timer)
// var space = Date.now() - beginTime
// if (space >= 1000) {
// console.log('onscroll')
// beginTime = Date.now()
// } else {
// timer = setTimeout(() => {
// console.log('onscroll, end')
// }, 1000)
// }
// }
// }
//
function jieliu (time, callback) {
var beginTime = Date.now()
var timer
return function () {
clearTimeout(timer)
var space = Date.now() - beginTime
if (space >= time) {
callback()
beginTime = Date.now()
} else {
timer = setTimeout(() => {
callback()
}, time)
}
}
}
window.onscroll = jieliu(1000, () => {
console.log('onscroll')
})
// window.onscroll = function () {
// console.log('onscroll')
// }
script>
body>
html>