vue 滚动加载案例-------------------------

news/2024/7/10 0:56:17 标签: js, 滚动加载, vue

效果展示 滚动到底部加载

在这里插入图片描述

项目结构

在这里插入图片描述

js_7">data.js

export default
  [{
    "recGroph": [
      {
        "key": ["设备指纹模型", "未知"],
        "value": 1200
      },
      {
        "key": ["设备指纹模型", "青铜"],
        "value": 1053
      },
      {
        "key": ["设备指纹模型", "黄金"],
        "value": 1077
      },
      {
        "key": ["设备指纹模型", "白银"],
        "value": 1126
      },
      {
        "key": ["设备指纹模型", "战神"],
        "value": 10
      },

      {
        "key": ["cookie数据", "未知"],
        "value": 21
      },
      {
        "key": ["cookie数据", "青铜"],
        "value": 22
      },
      {
        "key": ["cookie数据", "黄金"],
        "value": 24
      },
      {
        "key": ["cookie数据", "白银"],
        "value": 23
      },
      {
        "key": ["cookie数据", "战神"],
        "value": 11
      }
      ,
      {
        "key": ["IOS渠道", "未知"],
        "value": 31
      },
      {
        "key": ["IOS渠道", "青铜"],
        "value": 32
      },
      {
        "key": ["IOS渠道", "黄金"],
        "value": 34
      },
      {
        "key": ["IOS渠道", "白银"],
        "value": 33
      },
      {
        "key": ["IOS渠道", "战神"],
        "value": 1126
      },
      {
        "key": ["IOS11渠道", "未知"],
        "value": 31
      },
      {
        "key": ["IOS11渠道", "青铜"],
        "value": 32
      },
      {
        "key": ["IOS11渠道", "黄金"],
        "value": 34
      },
      {
        "key": ["IOS11渠道", "白银"],
        "value": 33
      },
      {
        "key": ["IOS11渠道", "战神"],
        "value": 1126
      }
     


    ]

  }
  ]

vue____vif__for____104">scroll.vue

<template>
  <div>
     <div class="table__div" id="resultScroll"  @scroll="handleScroll"   ref="myScrollbar">
        <div class="div" v-for="item in scroll_add" :key="item" >
              <table  >
            <tbody >
                 <tr  v-for="(item,index) in arr_list " :key='index'>
                 <td >{{item[0].key[1]}}</td>
                 <td  v-if="td_show"  v-for="(item1,index1) in item " :key='index1' >
                  <el-button  > {{Math.round((item1.value / total) * 10000) / 100.0 + "%"}}</el-button>
                </td>
                 <td  v-if="!td_show"  v-for="(item1,index1) in item " :key='index1' >
                  <el-tooltip   effect="dark" :content=' Math.round((`${item1.value}` / total) * 10000) / 100.0 + "%" ' placement="top-start" >
                  <el-button  > </el-button>
                  </el-tooltip>
                </td>
                 </tr>
            </tbody>
            <tfoot>
                  <tr> 
                      <td></td>
                      <td v-for="(item,index) in types " :key='index'>{{item}}</td>
                  </tr>
            </tfoot>
        </table>
        </div>
    </div>

        <!-- <table  >
            <tbody >
                 <tr  v-for="(item,index) in arr_list " :key='index'>
                 <td >{{item[0].key[1]}}</td>
                 <td  v-if="td_show"  v-for="(item1,index1) in item " :key='index1' >
                  <el-button  > {{Math.round((item1.value / total) * 10000) / 100.0 + "%"}}</el-button>
                </td>
                 <td  v-if="!td_show"  v-for="(item1,index1) in item " :key='index1' >
                  <el-tooltip   effect="dark" :content=' Math.round((`${item1.value}` / total) * 10000) / 100.0 + "%" ' placement="top-start" >
                  <el-button  > </el-button>
                  </el-tooltip>
                </td>
                 </tr>
            </tbody>
            <tfoot>
                  <tr> 
                      <td></td>
                      <td   v-for="(item,index) in types " :key='index'>{{item}}</td>
                  </tr>
            </tfoot>
        </table> -->
  </div>
</template>

<script>
import data1 from "./data.js";

export default {
  data() {
    return {
      arr_list: [], //等级属性数组
      types: [], //类型
      data_ios: [],
      td_show: true, //数据过多  隐藏数据
      data1: data1[0].recGroph,
      total: 10000,
      arr100: [],


      //滚动
      data_scroll: [1,1,1,1,1,1,1,1,1, 
                    1,1,1,1,1,1,1,1,1,
                    1,1,1,1,1,1,1,1,1,
                    1
                  ],
      scroll_add:[], //第一次渲染
      count: 0,//页数
      data_total:0, //总页数
      page_size:6,  //
      surplus:''

     
    };
  },

  created() {
    console.log(data1);
    //获取数据类型key的种类
    for (let i = 0; i < this.data1.length; i++) {
      this.types[i] = this.data1[i].key[0];
    }
    this.types = [...new Set(this.types)];
    for (let i = 0; i < this.types.length; i++) {
      this.data_ios = this.data1
        .filter(item => item.key[0] === this.types[i])
        .reverse();
    }
    for (let i = 0; i < this.data_ios.length; i++) {
      var arr = this.data1.filter(
        item => item.key[1] === this.data_ios[i].key[1]
      );
      this.arr_list.push(arr);
    }


 /////数据过多  隐藏数据 触摸提示
    if (this.types.length > 10 || this.arr_list.length > 10) {
      this.td_show = false;
    }


this.data_total=Math.ceil(this.data_scroll.length/this.page_size)
this.surplus=this.data_scroll.length%this.page_size


//进入页面第一次渲染---------------------
   for (let i = 0; i <this.page_size; i++) {
     this.scroll_add.push(this.data_scroll[i])
   }
  },

  methods: {

    handleScroll(){
                var that = this
                var sh = that.$refs['myScrollbar'].scrollHeight // 滚动条高度
                var st = that.$refs['myScrollbar'].scrollTop // 滚动条距离顶部的距离
                var ch = that.$refs['myScrollbar'].clientHeight // 滚动条外容器的高度
                if (st + ch >= sh) {
                    //滚动到底了-业务逻辑
                   this.count++
                   if( this.count<this.data_total){
                     for (let i = this.count*this.page_size; i <this.count*this.page_size+this.page_size ; i++) {
                       this.scroll_add.push(this.data_scroll[i])
                     }
                   } 
                   if( this.count==this.data_total){  //添加最后一页剩余
                      for (let i = this.count*this.page_size; i <this.count*this.page_size+this.surplus ; i++) {
                       this.scroll_add.push(this.data_scroll[i])
                     }                                                     
                   }
                }
            },
  }
};
</script>

<style>
.table__div {
  height:500px;
  overflow-y: scroll;
}
.div {
  width: 33%;
  height: 300px;
  /* background-color: rgb(185, 50, 50); */
  float: left;
}

table {
  border-collapse: collapse;
  width: 33%;
  float: left;
}
tr {
  width: 100%;
  display: flex;
  justify-content: space-around;
  align-items: center;
  border-bottom: 1px solid #fff;
}

.el-button,
tr {
  height: 30px;
}
.el-button,
td {
  width: 100%;
}

tbody td {
  white-space: nowrap;
  background-color: rgb(140, 178, 228);
  text-align: center;

  padding: 0;
  margin: 0;
  border-right: 1px solid #fff;
}

tbody tr td:first-child {
  background-color: transparent;
  text-align: right;
  color: #979797;
}

tbody tr:last-child td:not(:first-child) {
  background-color: #c1dbf9;
}

.el-button {
  display: inline-block;
  border: none;

  background-color: #2689ff;
  padding: 0;
  border-radius: 0;
  color: #fff;
}

tbody tr:last-child td:not(:first-child) .el-button {
  background-color: transparent;
  color: #fff;
}

.el-button:hover {
  background: rgb(82, 155, 243);
  color: #fff;
}
.el-button:focus {
  background: rgb(149, 195, 250);
  color: #fff;
}

tfoot td {
  width: 100%;
  color: #979797;
  white-space: nowrap;
}
</style>


http://www.niftyadmin.cn/n/1836590.html

相关文章

关于工作流(Workflow Foundation)的一些总结归纳

其实&#xff0c;以我的体会&#xff0c;工作流&#xff08;Workflow Foundation&#xff09;从它一诞生就褒贬不一。至少它确实目前看起来还是比较难用。在.NET 3.5以及之前的版本中&#xff0c;为了实现工作流&#xff0c;我们还是需要编写相当多的代码。 我觉得&#xff0c;…

高性能Linux集群监控

高性能Linux集群监控 时间&#xff1a;2007-11-09 14:54:17 来源&#xff1a;Linux联盟收集整理 作者&#xff1a; 监控是集群管理的核心任务。监控数据可用于调度任务、负载平衡、向管理员报告软硬件故障&#xff0c;并广泛地控制系统使用情况。监控信息必须在不影响集群性能…

vue-cli创建项目出错-----------

vue安装npm install vue-cli -g 出错 一般是本地安装过了 如果此时不能够创建项目 将原来的卸载即可 npm uninstall vue-cl i-g 查看vue版本 vue -V 存在即可创建项目 vue init webpack ‘my-object’

制作浮动无刷新div

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>实现div无刷新漂浮</titl…

食用纳豆的方法

纳豆&#xff0c;这词的语源要追溯到日本平安时代&#xff08;794―1192年&#xff09;。当时寺庙的厨房都称做“纳所”&#xff0c;纳豆来自僧人的素食。还有传说&#xff0c;是鉴真和尚将中国云南的豆豉传到日本&#xff0c;后变成纳豆。纳豆是一种大豆发酵食品。将黄豆洗净、…

acc 视频解密笔记

active player 是北京网动&#xff08;http://www.iactive.com.cn/&#xff09;出品的多媒体课件播放器。很好用。在国内的教育行业有较为广泛的应用。时代光华、华图网校等课件都是用这种播放器来播放的。 手中的课件使用了网络验证。二话不说先抓包。结果如下&#xff1a;代码…

淘宝流程理解篇-UED流程

我们的项目马上就要KICKOFF了&#xff0c;借今天PRD评审的机会和Taobao UED的一位主管聊了一下目前taobao UED的设计流程&#xff0c;以便更好的了解在和UED配合和资源申请的过程中需要的注意点。以前在AS也一直和UED 有交互&#xff0c;但说实在并不清楚他们内部是怎么运作的。…

开发日志-4.29

开发日志记录时间&#xff1a;2010.4.29 Thuresday 目标&#xff1a; 1&#xff09; 实现多人物&#xff0c;并且同类型共用一个数据。增加部分游戏场景物体&#xff0c;比如木桶之类。 2&#xff09; 实现碰撞。 3&#xff09; 人物在遭受打击时表现出应有的状态。 共用数…