Vue.js上下滚动加载组件的实例代码


Posted in Javascript onJuly 17, 2017

由于工作的需要并鉴于网上的vue.js滚动加载方案不合适,自己写了一个简单实用的。就短短的150行代码。

Vue.js上下滚动加载组件的实例代码

组件代码

// scrollLoader.vue
// 滚动加载组件

<style scoped>
  .container-main {margin: 0 auto; overflow: auto; overflow-x: hidden; padding: 0;}
  .loading{ width: 100%; height: 40px; position: relative; overflow: hidden; text-align: center; margin: 5px 0 ; color: #999; font-size: 13px;}
  .loading-icon{color: #707070;};
  .loader {
    font-size: 10px;
    margin: 8px auto;
    text-indent: -9999em;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #999;
    background: -moz-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
    background: -webkit-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
    background: -o-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
    background: -ms-linear-gradient(left, #999 10%, rgba(255, 255, 255, 0) 42%);
    background: linear-gradient(to right, #999 10%, rgba(255, 255, 255, 0) 42%);
    position: relative;
    -webkit-animation: load3 1s infinite linear;
    animation: load3 1s infinite linear;
  }
  .loader:before {
    width: 50%;
    height: 50%;
    background: #999;
    border-radius: 100% 0 0 0;
    position: absolute;
    top: 0;
    left: 0;
    content: '';
  }
  .loader:after {
    background: #f5f5f5;
    width: 72%;
    height: 75%;
    border-radius: 68%;
    content: '';
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
  }
  @-webkit-keyframes load3 {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
  }
  @keyframes load3 {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
  }

</style>

<template>
  <div id="scrollLoader-container" class="container-main">
    <div class="loading" v-if="topLoading">
      <div class="loader">加载中...</div>
    </div>

    <div :style="'min-height:' + realMinHeight + 'px; overflow-x:hidden'">
      <slot></slot>
    </div>

    <div class="loading" v-if="bottonLoading">
      <div class="loader">加载中...</div>
    </div>
  </div>
</template>

<script>
  export default {
    name: "scroll-loader",

    props: {
      //给slot传一个最小值,保证一开始能出现滚动条
      'minHeight': {
        type: Number,
        default: 800
      }, 

    },

    created(){
    },
    computed: {
      realMinHeight(){
        return this.minHeight + 30
      }
    },
    data() {
      return {
        topLoading: false,
        bottonLoading: false,

        stopTopLoading: false, //是否停止传播滚动到顶部事件
        stopBottonLoading: false, //是否停止传播滚动到底部事件
      }
    },
    mounted(){
      this.listenScroll();
    },

    methods: {
      listenScroll(){
        var me = this;
        var topDone = (stopTopLoading) => {
          me.topLoading = false;
          if(stopTopLoading) me.stopTopLoading = true;
        };

        var bottonDone = (stopBottonLoading) => {
          me.bottonLoading = false;
          if(stopBottonLoading) me.stopBottonLoading = true;
        };
        setTimeout(function(){
          var scrollContainer = document.getElementById('scrollLoader-container');

          scrollContainer.onscroll = function(){

            if(scrollContainer.scrollTop<=0 && !me.stopTopLoading){
              if(me.topLoading) return;

              me.topLoading = true;
              me.$emit('scroll-to-top', topDone);
            }
            if((scrollContainer.offsetHeight + scrollContainer.scrollTop+1 >= scrollContainer.scrollHeight) && !me.stopBottonLoading){
              if(me.bottonLoading) return;

              me.bottonLoading = true;
              scrollContainer.scrollTop += 40;
              me.$emit('scroll-to-botton', bottonDone);
            }
          }
        }, 50)
      },

    }
  }
</script>

源码:https://github.com/doterlin/vue-wxChat

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 Javascript
js实现正则匹配中文标点符号的方法
Dec 23 Javascript
20分钟轻松创建自己的Bootstrap站点
May 12 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
Aug 05 Javascript
微信小程序中做用户登录与登录态维护的实现详解
May 17 Javascript
基于react框架使用的一些细节要点的思考
May 31 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
Aug 15 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
JS非行间样式获取函数的实例代码
Jun 05 Javascript
使用vscode快速建立vue模板过程详解
Oct 10 Javascript
js实现选项卡效果
Mar 07 Javascript
vue添加自定义右键菜单的完整实例
Dec 08 Vue.js
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 #Javascript
详解利用jsx写vue组件的方法示例
Jul 17 #Javascript
Javascript实现找不同色块的游戏
Jul 17 #Javascript
Vue.js 单页面多路由区域操作的实例详解
Jul 17 #Javascript
Vue项目webpack打包部署到服务器的实例详解
Jul 17 #Javascript
JS中Safari浏览器中的Date
Jul 17 #Javascript
Vue.extend构造器的详解
Jul 17 #Javascript
You might like
php中截取字符串支持utf-8
2007/01/18 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
Open and Print a Word Document
2007/06/15 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
详解Nodejs mongoose
2018/06/10 NodeJs
vue指令做滚动加载和监听等
2019/05/26 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python虚拟环境项目实例
2017/11/20 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python多进程间通信代码实例
2019/09/30 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
安全负责人任命书
2014/06/06 职场文书
新手上路标语
2014/06/20 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
2014年环保局工作总结
2014/12/11 职场文书
总结Python变量的相关知识
2021/06/28 Python