zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    infinite auto load more & infinite scroll & load more

    https://codepen.io/xgqfrms/pen/NZVvGM

        autoScrollLoadMore(dom = ``, callback = () => console.log(`scroll load more, cb`)) {
            // let box = document.querySelector(`[data-dom="outbox"]`);
            let box = document.querySelector(dom);
            log(`box =`, box);
            log(`box.clientHeight =`, box.clientHeight);
            log(`box.scrollHeight =`, box.scrollHeight);
            log(`box.scrollTop =`, box.scrollTop);
            if (box) {
                let onceFlag = box.dataset.flag || false;
                if (!onceFlag) {
                    box.dataset.flag = true;
                    box.addEventListener(`scroll`, (e) => {
                        let {
                            clientHeight: ch,
                            scrollHeight: sh,
                            scrollTop: st,
                        } = e.target;
                        // let ch = e.target.clientHeight;
                        // let sh = e.target.scrollHeight;
                        // let st = e.target.scrollTop;
                        // log(`ch =`, ch);
                        // log(`sh =`, sh);
                        // log(`st =`, st);
                        // log(`(sh - st) =`, (sh - st));
                        // log(`(ch - 50) =`, (ch + 10));
                        let trigger = (sh - st) < (ch + 10) ? true : false;
                        log(`trigger =`, trigger);
                        if (trigger && this.isTriggerOnce) {
                            alert(`trigger loadMore function!`);
                            this.isTriggerOnce = false;
                            // fetch data
                            // callback();
                            setTimeout(() => {
                                // alert(`Ajax & fetch data success!`);
                                this.isTriggerOnce = true;
                            }, 1000);
                        } else {
                            // do nothing
                            // log(`(sh - st) =`, (sh - st));
                            // log(`(ch - 50) =`, (ch + 10));
                        }
                    });
                } else {
                    log(`only bind once!`);
                }
            } else {
                // error
                error(`box is null!`);
            }
        },
    
    
    
    "use strict";
    
    /**
     * 
     * @author xgqfrms
     * @license MIT
     * @copyright xgqfrms
     * 
     * @description scrollBottomAutoLoadMore
     * @augments 
     * @example 
     * @link 
     * 
     */
    
    // utils
    let log = console.log;
    let error = console.error;
    
    let box = document.querySelector(`[data-dom="outbox"]`);
    
    let isTriggerOnce = true;
    
    const scrollBottomAutoLoadMore = (debug = false) => {
        for (let i = 0; i < 20; i++) {
            let template = `<div class="innerbox" data-dom="innerbox">${i + 1}</div>`;
            box.insertAdjacentHTML(`beforeend`, template);
        }
        // let BoundingClientRect = box.getBoundingClientRect();
        // let ClientRects = box.getClientRects();
        // log(`BoundingClientRect =`, BoundingClientRect);
        // log(`ClientRects`, ClientRects);
        // Event
        log(`box.clientHeight =`, box.clientHeight);
        log(`box.scrollHeight =`, box.scrollHeight);
        log(`box.scrollTop =`, box.scrollTop);
        box.addEventListener(`scroll`, (e) => {
            // log(`e =`, e);
            // log(`e.target =`, e.target);
            // clientHeight, offsetHeight, scrollHeight
            let ch = e.target.clientHeight;
            // let ch = 50;
            // let cw = e.target.clientWidth;
            // let oh = e.target.offsetHeight;
            // let ow = e.target.offsetWidth;
            let sh = e.target.scrollHeight;
            let st = e.target.scrollTop;
            let trigger = (sh - st) < (ch + 10) ? true : false;
            // let trigger = (sh - st) < (ch + 50) ? true : false;
            // let triggerValue = (sh - st) < (ch + 50);
            if (trigger && isTriggerOnce) {
                alert(`trigger loadMore function!`);
                isTriggerOnce = false;
                for (let i = 0; i < 10; i++) {
                    let template = `<div class="innerbox" data-dom="innerbox">${i + 1}</div>`;
                    box.insertAdjacentHTML(`beforeend`, template);
                }
                setTimeout(() => {
                    alert(`Ajax & fetch data success!`);
                    isTriggerOnce = true;
                }, 1000);
            } else {
                // do nothing
                // log(`(sh - st) =`, (sh - st));
                // log(`(ch - 50) =`, (ch + 50));
                // log(`triggerValue =`, triggerValue);
            }
        });
        // MouseEvent
        box.addEventListener(`click`, (e) => {
            // log(`e =`, e);
            // log(`e.target =`, e.target);
            // pageX, pageY, screenX, screenY, clientX, and clientY
            let px = e.pageX;
            let py = e.pageY;
            // log(`px =`, px);
            // log(`py =`, py);
            let sx = e.screenX;
            let sy = e.screenY;
            // log(`sx =`, sx);
            // log(`sy =`, sy);
            let cx = e.clientX;
            let cy = e.clientY;
            // log(`cx =`, cx);
            // log(`cy =`, cy);
            let lx = e.layerX;
            let ly = e.layerY;
            // log(`lx =`, lx);
            // log(`ly =`, ly);
            let mx = e.movementX;
            let my = e.movementY;
            // log(`mx =`, mx);
            // log(`my =`, my);
            let ox = e.offsetX;
            let oy = e.offsetY;
            // log(`ox =`, ox);
            // log(`oy =`, oy);
        });
    };
    
    
    
    window.addEventListener("DOMContentLoaded", (event) => {
        console.log("DOM fully loaded and parsed");
        scrollBottomAutoLoadMore();
    });
    
    // export default scrollBottomAutoLoadMore;
    
    // export {
    //     scrollBottomAutoLoadMore,
    // };
    
    

    vue-infinite-scroll

    https://github.com/ElemeFE/vue-infinite-scroll

    https://www.npmjs.com/package/vue-infinite-scroll

    
    
    

    https://segmentfault.com/a/1190000011693433

    
    
    

    v-infinite-scroll

    https://github.com/dflourusso/v-infinite-scroll

    https://www.npmjs.com/package/v-infinite-scroll

    http://dflourusso.com.br/v-infinite-scroll/



    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    OC UITextField只允许输入两位小数
    UIBezierPath使用
    2020-11-25:go中,map的底层数据结构是什么?
    2020-11-24:n个物品每个物品都有一定价值,分给2个人,怎么分两个人的价值差最小?
    2020-11-23:go中,s是一个字符串,s[0]代表什么?是否等于固定字节数?
    2020-11-22:mysql中,什么是filesort?
    2020-11-21:java中,什么是跨代引用?
    2020-11-20:java中,听说过CMS的并发预处理和并发可中断预处理吗?
    2020-11-19:go中,defer原理是什么?
    2020-11-18:java中,到底多大的对象会被直接扔到老年代?
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11184504.html
Copyright © 2011-2022 走看看