vue 在pc端实现滚动加载

实现pc端的滚动加载功能

首先要想滚动加载要知道滚动条距离底部的距离,这里我定义3个方法


//滚动条在Y轴上的滚动距离

    getScrollTop() {

      var scrollTop = 0,

        bodyScrollTop = 0,

        documentScrollTop = 0;

      if (document.body) {

        bodyScrollTop = document.body.scrollTop;

      }

      if (document.documentElement) {

        documentScrollTop = document.documentElement.scrollTop;

      }

      scrollTop =

        bodyScrollTop - documentScrollTop > 0 ?

        bodyScrollTop :

        documentScrollTop;

      return scrollTop;

    },

    //文档的总高度

    getScrollHeight() {

      var scrollHeight = 0,

        bodyScrollHeight = 0,

        documentScrollHeight = 0;

      if (document.body) {

        bodyScrollHeight = document.body.scrollHeight;

      }

      if (document.documentElement) {

        documentScrollHeight = document.documentElement.scrollHeight;

      }

      scrollHeight =

        bodyScrollHeight - documentScrollHeight > 0 ?

        bodyScrollHeight :

        documentScrollHeight;

      return scrollHeight;

    },

    //浏览器视口的高度

    getWindowHeight() {

      var windowHeight = 0;

      if (document.compatMode == "CSS1Compat") {

        windowHeight = document.documentElement.clientHeight;

      } else {

        windowHeight = document.body.clientHeight;

      }

      return windowHeight;

    },

然后定义一个menu方法,就是滚动的时候,去加载的方法


menu() {

      if(this.isKaiGuan){

        let scroll =

          this.getScrollTop() + this.getWindowHeight() - this.getScrollHeight();

        if (scroll > -100) {

          this.sizePage++;

          this.getActivityList(this.activeName);

        }

      }

    },

这里要提一点,需要定义开关isKaiGuan,不然,滚动的时候,ajax异步加载,会一次性加载好多次

请求前定义false,请求回调后定义true,其实为了优化效果,可以这样写


if(res.data.data.length!=24){

                this.isKaiGuan = false;

            }else{

                this.isKaiGuan = true;

            }

判断是否长度是24,这里的24是我的一次加载的次数,这样可以保证下次如果数据不到24,就没必要在去加载了,相当于少加载一次。

然后只需要在mounted里添加


window.addEventListener('scroll', this.menu);

由于滚动加载会影响其他页面,保证其他页面滚动的时候,限制掉

添加判断


if (this.$route.name == "createActivites") {

        window.addEventListener('scroll', this.menu);

      }else{

        window.addEventListener('scroll', "");

      }

这样效果就是实现了,对了,如果还想用图片懒加载的话,可以使用vue自带的插件vue-lazyload

引入之后,只需要在img里添加v-lazy="images/...jpg"即可。

觉着好的话,记着点赞啊。

有评论说要全部代码,我这边把我之前写好的代码删减一下,
各个代码位置

<template>
  <div class="news-container">
    <breadcrumbHead :routeList="routeList" :isSearch="true" @searchRes="searchRes"></breadcrumbHead>
    <div class="company-news-page">
      <div class="news-list-page" ref="scrollList" style="overflow-y: scroll;">
        <commonListActivity :list="initImageList" @handleJumpDetail="handleJumpDetail"></commonListActivity>
       
      </div>
    </div>
  </div>
</template>

<script>
import breadcrumbHead from "../../components/common/breadcrumbHead";
import commonListActivity from "../../components/common/commonListActivity";
export default {
  data() {
    return {
      currentPage: 1, //当前页
      routeList: [], // 面包屑路由数组
      initImageList: [], // 员工活动列表数据
      pagesize: 10, // 每页数量
      resPage: {}, // 分页对象
      inputValue: "", // 搜索框内容
      totalPage: 0, // 总页数
      isKaiGuan: true
    };
  },
  created() {
    this.routeList = this.$route.meta;
    this.getImgNum();
  },
  mounted() {
 
    if (this.$route.path == "/employeeActivity") {
      this.$refs.scrollList.addEventListener("scroll", this.menu);
    } else {
      window.addEventListener("scroll", "");
    }
  },
  methods: {
  
    menu() {
      if (this.isKaiGuan) {
        let scroll =
          this.getScrollTop() + this.getWindowHeight() - this.getScrollHeight();
  

        if (scroll > -400) {
          this.page++;
          this.getImgNum();
        }
      }
    },
    //滚动条在Y轴上的滚动距离
    getScrollTop() {
      var documentScrollTop = 0;
      documentScrollTop = this.$refs.scrollList.scrollTop;
      return documentScrollTop;
    },
    //文档的总高度
    getScrollHeight() {
      var documentScrollHeight = 0;
      documentScrollHeight = this.$refs.scrollList.scrollHeight;
      return documentScrollHeight;
    },
    //浏览器视口的高度
    getWindowHeight() {
      var windowHeight = 0;
      windowHeight = this.$refs.scrollList.clientHeight;
      return windowHeight;
    },
    // 跳转到员工活动详情
    handleJumpDetail(id) {
      this.$router.push({
        path: "/employeeActivity/employeeDetail",
        query: { id }
      });
    },
    // 分页器功能
    handleSizeChange(val) {
      this.pagesize = val;
      this.getImgNum();
    },
    handleCurrentChange(val) {
      this.currentPage = val;
      this.getImgNum();
    },
    //根据内容搜索
    searchRes(inputValue) {
      this.currentPage = 1;
      this.initImageList = [];
      this.inputValue = inputValue;
      this.getImgNum();
    }
  },
  components: {
    breadcrumbHead,
    commonListActivity
  }
};
</script>



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342