Day28:每天一个小练习 - JS30-13-Slide in on Scroll

参考资料:
Alex老师教学
PJCHENder笔记

卷动出现图片。


题目预设的过滤效果,避免多次触发使效能下降

function debounce(func, wait = 20, immediate = true) {
    var timeout;
    return function () {
        var context = this,
            args = arguments;
        var later = function () {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
}

写出监听

// 控制卷轴
let scrollHandler = () => {
    console.log('scroll', new Date().getTime()); //可看出滑动时的时间差距很小

};
// 卷轴在浏览器上,使用window
window.addEventListener('scroll', scrollHandler);

先写出上下高度,开始写图片进入画面

// 控制卷轴
let scrollHandler = () => {
    let windowTop = window.scrollY; //相对於最上方的网页座标,单位px
    let windowBottom = windowTop + window.innerHeight; //网页最底部高度 = 上方高度 + 页面高度
    
};

图片中段进入页面时滑入

let images = document.querySelectorAll('img'); //所有图片

// 控制卷轴
let scrollHandler = () => {
    let windowTop = window.scrollY; //相对於最上方的网页座标,单位px
    let windowBottom = windowTop + window.innerHeight; //网页最底部高度 = 上方高度 + 页面高度
    iimages.forEach(img => {
        //图片一半进入画面才出现
        if (img.offsetTop + img.height / 2 < windowBottom) {
            img.classList.add('active');
        }
    });
};

优化并加入移除功能,效果就会是图片依照画面卷动进入和消失

	images.forEach(img => {
        let imgMiddle = img.offsetTop + img.height / 2; //图片与上方距离+图片高度/2
        //图片进入画面最下方和最上方之间时加入active使之出现,反之移除使图片消失
        if (imgMiddle < windowBottom && imgMiddle > windowTop) {
            img.classList.add('active');
        } else {
            img.classList.remove('active');
        }
    });

在监听加入预设的方讯就完成了

window.addEventListener('scroll', debounce(scrollHandler));

连结


<<:  Day29 -- Video Speed Controller

>>:  Day30_CSS3-Text效果

视觉化平台规划

昨天测试完API的第一步之後, 我突然想到我还没说视觉化平台的整个规划, 今天就来谈谈这整个专案的规...

[ Day 30 | CSS ] 用 clip-path 绘制多边形

之前一直很好奇有些网站的背景图片是如何裁切成不同形状的, 除了本来就放置裁切好的图片以外不知道还有没...

D12-(9/12)-原相(3227)-任天堂概念股

注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...

Day 8 Self-attention(二) 如何算出input彼此是相关的?

前言 昨天讲到为什麽要使用self-attention,今天稍微来介绍一下self-attentio...

Day27 interrupt 的处理程序

前言 昨天讲完了上半部的考量之後,可以知道上半部就是要追求快速,能尽快把事情处理好交给下半部就是上半...