0.5.2-beta2 • Published 7 years ago

vue-ohyeah-scroll v0.5.2-beta2

Weekly downloads
48
License
MIT
Repository
-
Last release
7 years ago

vue-ohyeah-scroll

npm NPM GitHub last commit npm downloads

仿 MAC 系统的滚动条

主要在 PC 端使用,如果检测到是移动端,会直接使用原生滚动条,ohyeah-scroll 不会进行初始化

IE / EdgeFirefoxChromeSafariOpera
IE10, IE11, Edgelast 2 versionslast 2 versionslast 2 versionslast 2 versions

重构待测

  1. 测嵌套 👌
  2. 触发各事件 👌
  3. 平滑滚动
  4. 锚点跳转 👌
  5. 键盘事件 👌
  6. 变颜色,换位置,随机改变大小 👌
  7. 各方法测试 👌
  8. safari 多次触发触底触顶事件 👌
  9. 整理代码 👌
  10. padding 2px 👌

特性

  • 默认是 MAC 系统的主题,也可以自定义轨道和滑块颜色
  • 可以设置滚动条显示在左边或上面
  • 自动显隐滚动条
  • 动态手动设置滚动条的 scrollTop 和 scrollLeft
  • 支持一键滚动到底部
  • 内容随意增减,父级容器随便改变大小
  • 支持嵌套

效果预览

https://isluo.com/work/vue-ohyeah-scroll/

安装

  yarn add vue-ohyeah-scroll

使用

全局注册

import Ohyeah from 'vue-ohyeah-scroll';
Vue.use(Ohyeah);

局部注册

import { Ohyeah } from 'vue-ohyeah-scroll';

export default {
  components: {
    Ohyeah,
  },
};

组件中使用

<template>
  <ohyeah width="100vw" height="100vh">
    ...
  </ohyeah>
</template>

自定义属性

属性名类型默认值描述
widthNumber,String100%容器宽度,默认贴合父级(父级需要有宽度),也可自己设置,接受合法的CSS值,传数字会转换成px
heightNumber,String100%容器高度,默认贴合父级(父级需要有高度),也可自己设置,接受合法的CSS值,传数字会转换成px
breadthNumber6滑块的粗细,单位: px
thumbColorString#7f7f7f滑块的颜色,接受 CSS 颜色值
trackColorStringtransparent轨道的颜色,接受 CSS 颜色值
autoHideBooleantrue是否自动隐藏滚动条,鼠标在区域内才显示
leftBooleanfalse是否把垂直滚动条放在容器的左边
topBooleanfalse是否把水平滚动条放在容器的顶端
noVerBooleanfalse是否禁用垂直滚动条(overflow-y:hidden)
noHorBooleanfalse是否禁用水平滚动条(overflow-x:hidden)
minLengthNumber20当内容无限多的时候,滑块最短不得低于此值,单位: px
useKeybordBooleanfalse是否启用键盘方向键控制
movePxNumber160当用键盘控制时,单次按键,页面滚动的距离,单位: px
resizeObjectBooleanfalse如果存在监听不到内容高度变化的情况可以把这个值改为true试试,(nuxt.js打包后发现有这种情况)

自定义事件

自身方法

方法名参数描述
scrollTo(x,y,time)将滚动条滚动到指定的位置
getScrollInfo获取当前滚动条各种信息

如何使用自身方法:

  <template>
    <!-- 需要定义一个ref -->
    <ohyeah ref="ohyeah">
      ...
    </ohyeah>
  </template>

  <script>
    export default {
      methods:{
        scrollTo(){
          // 水平保持原位,垂直滚100个像素,在300ms内完成
          this.$refs.ohyeah.scrollTo(null, 100, 300);
        },
        scrollToEnd(){
          // 水平滚到最左边,垂直滚到底,瞬间完成
          this.$refs.ohyeah.scrollTo(0, 'end', 0);
        },
        getScrollInfo(){
          // 获取当前滚动条各种信息
          const msg = this.$refs.ohyeah.getScrollInfo();
          /**
           * offsetHeight: 内容区的总高度,
           * offsetWidth: 内容区的总宽度,
           * height: 容器的高度,
           * width: 容器的宽度,
           * scrollTop: 内容区已被滚到上边去的距离,
           * scrollLeft: 内容区已被滚到左边去的距离
           * */
        }
      }
    }
  </script>

完整例子

  <template>
    <!-- 若不设置ohyeah的width和height, 则需要一个具有高度和宽度的容器来包裹ohyeah -->
    <div style="height:100vh; width:50%;">
      <ohyeah
        :autoHide="false"
        @onVerStart="console.log('到顶了')"
      >
        <div v-for="(item,index) in testData" :key="index">{{index}}</div>
      </ohyeah>
    </div>
  </template>

  <script>
    import { Ohyeah } from "vue-ohyeah-scroll";
    export default {
      data(){
        return {
          testData: new Array(100).fill("")
        }
      }
      components:{
        Ohyeah
      }
    }
  </script>

注意事项

  • 如果你不设置ohyeah的width和height属性,或者设置为百分比,
  • 那么就需要一个具有高度和宽度的父级元素来包裹ohyeah

更新

  • 0.4.0 增加了键盘方向键控制
  • 0.3.0 this.$refs.ohyeah.scrollTo(null, 100); 传递null表示保持原位不动
  • 0.2.9 处理了一下nuxt.js中使用的情况。修复了卸载组件时没有正确卸载容器监听的方法
  • 2019/05/09 处理了嵌套滚动条的事件冒泡问题

    原生滚动条(子)和ohyeah(父)嵌套时,原生滚动条需要设置@wheel.stop, todo: 目前的方案不完美,待升级

0.5.6

7 years ago

0.5.6-beta3

7 years ago

0.5.6-beta2

7 years ago

0.5.6-beta

7 years ago

0.5.5

7 years ago

0.5.4

7 years ago

0.5.3

7 years ago

0.5.2-beta3

7 years ago

0.5.2-beta2

7 years ago

0.5.2-beta

7 years ago

0.5.1-beta

7 years ago

0.5.0

7 years ago

0.5.0-beta2

7 years ago

0.5.0-beta

7 years ago

0.4.2

7 years ago

0.4.1

7 years ago

0.4.0

7 years ago

0.3.2

7 years ago

0.3.1

7 years ago

0.3.0

7 years ago

0.2.9

7 years ago

0.2.8

7 years ago

0.2.7

7 years ago

0.2.6

7 years ago

0.2.5

7 years ago

0.2.4

7 years ago

0.2.3

7 years ago

0.2.2

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.5

7 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.12

7 years ago

0.0.11

7 years ago

0.0.10

7 years ago

0.0.9

7 years ago

0.0.8

7 years ago

0.0.7

7 years ago

0.0.6

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago