vue 滚动加载

<template>
  <div class="wraper" @scroll="onScroll($event)">
    <div class="item" v-for="item in items">
      {{item}}
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      items:[],
      pgSize:36,
      rawItems:[],
      pgNo:1
    }
  },

  ready () {
    for(var i=0;i<=1000;i++){
      this.rawItems.push(i)
    }
    this.changePgItems()
  },
  methods:{
    onScroll(event){
      var offsetHeight = event.currentTarget.offsetHeight,
      scrollHeight = event.target.scrollHeight,
      scrollTop = event.target.scrollTop,
      scrollBottom = offsetHeight + scrollTop
      if(scrollTop===0)
      {
        if(this.pgNo===1)
        {
          return
        }
        this.pgNo--
        this.changePgItems()
        event.target.scrollTop=offsetHeight-1
      }
      if(scrollBottom===scrollHeight || scrollBottom===scrollHeight+2)
      {
        if(this.pgNo==Math.ceil(this.rawItems.length/this.pgSize))
        {
          return
        }
        this.pgNo++
        this.changePgItems()
        event.target.scrollTop=1
      }
    },
    changePgItems(){
      var start = (this.pgNo-1) * this.pgSize,
      items = this.rawItems.slice(start,this.pgSize+((this.pgNo-1)*this.pgSize))
      this.items = items
    }
  }
}

</script>

<style lang="less">

.wraper{
  border:1px solid red;
  height:100vh;
  overflow-y: auto;
  box-sizing: border-box;

  .item{
    height: 30px;
    border-bottom: 1px solid #ccc;
  }
}
</style>

  

时间: 2024-11-14 10:58:41

vue 滚动加载的相关文章

手撸一个Vue滚动加载自定义指令

用Vue在移动端做滚动加载,使用mint-ui框架, InfiniteScroll指令loadmore组件,在uc浏览器和qq浏览器都无法触发.无奈我只能自己写了. 决定用vue 的自定义指令 写滚动加载. 核心的api document.body.scrollTop 滚动条滚动的距离 (这个有兼容性问题,兼容性写法) let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body

基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多

通过多次爬坑,发现了这些监听滚动来加载更多的组件的共同点, 因为这些加载更多的方法是绑定在需要加载更多的内容的元素上的, 所以是进入页面则直接触发一次,当监听到滚动事件之后,继续加载更多, 所以对于无限滚动加载不需要写首次载入列表的函数, 代码如下: html: //父组件 <div v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance=

vue2.0无限滚动加载数据插件

  做vue项目用到下拉滚动加载数据功能,由于选的UI库(element)没有这个组件,就用Vue-infinite-loading 这个插件代替,使用中遇到的一些问题及使用方法,总结作记录! 安装:npm install vue-infinite-loading –save 引入 ES6 import InfiniteLoading from 'vue-infinite-loading'; export default { components: { InfiniteLoading, }, }

js 滚动加载iframe框中内容

var isIE6 = !!window.ActiveXObject&&!window.XMLHttpRequest; //滚动加载 var scrollLoad =function(){ $("#content iframe[_src]").each(function(){ var t = $(this); if( t.offset().top<= $(document).scrollTop() + $(window).height() ) { t.attr(

滚动加载服务器端内容——例子

网页代码如下 <!doctype html> <html> <head> <meta charset="utf-8"> <title>滚动加载</title> <style> * {margin:0; padding:0; border:0;} #container {width:960px; margin:auto;} #container:after {display:block; height:0

滚动加载图片

做了一个粗糙的滚动加载图片例子,先分享一下,后续不断完善. 基本功能是这样的: 1.页面一共有7层,每一层可以认为是不同类型的商品: 2,页面初始化时,只加载第一层的图片和数据等: 3,滚动时,动态加载图片:(一层一层的加载) 4,如果已经加载过的层,不再加载. 样式:     * {      margin: 0px;      padding: 0px;     } body { background: rgb(250, 222, 222); } .container { width: 95

HTML5商城开发一 楼层滚动加载数据

对于楼层加载在以前只是个想法,从来没实现过,刚好项目中碰到,再此总结一下 场景:HTML5,局部商品列表信息滚动(局部滚动条) 1.通过jq设置subCategoryScroll的高度为屏幕显示高度(假设为100),设置productlist的高度为列表信息的实际高度(假设为300) <div id="subCategoryScroll" style="overflow: hidden; overflow-y: scroll;"> <ul clas

js滚动加载

背景 移动web开发中,为了加快响应速度,通常在服务端输出首屏页面,动态异步加载listview.而对于包含大量图片的listview,一起加载将耗费大量http请求,进而影响响应速度.滚动加载这时就可以成为一种可选的优化方案. 要点 生成的img标签用一个属性存储图片地址而不是用src document.images 获取当前img标签 isInSight: 是否有元素处于当前可视区域内 window.addEventListener('scroll', lazyLoad, false); 监

前端页面实现滚动加载数据的案例

1.我们在项目中经常会有这样的需求就是需要滚动加载数据: 2.原理利用分页的原理即可实现:见下面代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> &l