Giter Club home page Giter Club logo

vue-happy-scroll's Introduction

vue happy scroll

Downloads Version open issues closed issues License 欢迎PR

Chrome Firefox Safari Edge IE
9
10
11

当前版本不支持移动端(还未在移动端进行过测试)。The current version not support SP(I haven't tested it on the smartphone yet).

Feature:

  • 保留原生滚动条功能
  • 支持动态设置滚动条颜色
  • 支持设置滚动条的位置。左右(竖向滚动条)、上下(横向滚动)方向
  • 支持隐藏滚动条
  • 支持动态设定滚动位置,并支持top与left值同步
  • 支持动态数据resize,滚动条自动隐藏与显示
  • 支持设置resize滚动条变化规则(e. 在chart应用中,来新消息时,滚动条始终在最底部)
  • 支持设置滚动速度
  • 支持设置隐藏滚动条,hover时显示

Demo 地址

https://tangdaohai.github.io/vue-happy-scroll/

vue-happy-scroll 是干嘛的

vue-happy-scroll是一款基于vue2.0的滚动条插件。

此插件致力解决原生滚动条在不同系统、不同浏览器中的丑陋表现,在保证原生滚动条功能可用的基础上实现了更丰富的功能、保证在所支持的浏览器下展现出风格一致、交互体验一致的滚动条。

它可以让你无需关心滚动条的兼容性问题,无需关心内容区域的宽高,当设定resize属性后,可以根据内容大小自动显示或隐藏滚动条。 这里有对各种丰富的额外功能进行说明。

版本迭代计划列表

https://github.com/tangdaohai/vue-happy-scroll/projects/1

安装

  1. npm 推荐使用npm,这样可以跟随你的webpack配置去选择怎样打包。
npm i -D vue-happy-scroll
  1. CDN

    当前是使用的https://unpkg.com托管CDN,unpkg会自动与npm中版本保持同步。

    通过以下方式引入即可:

    <html>
      <head>
        <!-- 引入css,该链接始终为最新版的资源 -->
        <link rel="stylesheet" href="https://unpkg.com/vue-happy-scroll/docs/happy-scroll.css">
      </head>
      <body>
      <!-- 引入vue -->
      <!-- 引入组件,该链接始终为最新版的资源 -->
      <script src="https://unpkg.com/vue-happy-scroll/docs/happy-scroll.min.js"></script>
      </body>
    </html>

    可以访问https://unpkg.com/vue-happy-scroll/ 来选择不同版本

注册组件

  1. 全局注册

    <template>
      <happy-scroll>
        <!-- 你的内容 -->
      </happy-scroll>
    </template>
    <script>
      import Vue from 'vue'
    
      import HappyScroll from 'vue-happy-scroll'
      // 引入css
      import 'vue-happy-scroll/docs/happy-scroll.css'
      Vue.use(HappyScroll)
    
      //或者
      import { HappyScroll } from 'vue-happy-scroll'
      //自定义组件名
      Vue.component('happy-scroll', HappyScroll)
    </script>
  2. 局部注册

    <template>
      <happy-scroll>
        <!-- 你的内容 -->
      </happy-scroll>
    </template>
    <script>
      import { HappyScroll } from 'vue-happy-scroll'
      // 引入css,推荐将css放入main入口中引入一次即可。
      import 'vue-happy-scroll/docs/happy-scroll.css'
      export default {
          name: '',
          components: {HappyScroll} //在组件内注册
      }
    </script>
  3. vue是全局变量时

    //如果vue是全局变量,happyScroll自动全局安装。
    if (typeof window !== 'undefined' && window.Vue) {
      Vue.component('happy-scroll', HappyScroll)
    }
    <html>
      <happy-scroll>
        <!-- 你的内容 -->
      </happy-scroll>
    </html>

属性

color

  • 类型String

  • 默认值rgba(51,51,51,0.2)

  • 用法:

    <happy-scroll color="rgba(51,51,51,0.2)">
      <!-- 你的内容 -->
    </happy-scroll>

    设置滚动条的颜色

    建议使用rgba,这样可以为滚动条设置透明度,当然,如果你需要设置透明度的话。

size

  • 类型Number|String

  • 默认值4

  • 用法:

      <happy-scroll size="8">
        <!-- 你的内容 -->
      </happy-scroll>

    设置滚动条的大小。

    对于竖向滚动条表示宽度,横向滚动条表示高度

min-length-h (*new)

  • 类型Number

  • 默认值40

  • 单位px

  • 用法

    <happy-scroll :min-length-h="20">
      <!-- 你的内容 -->
    </happy-scroll>

    设置 横向滚动条最小的长度,当元素无限长或者宽的时候,会导致滚动条无限小,这种情况可以使用该属性。来设置最小的长度。

    <happy-scroll :min-length-h="0.2">
      <!-- 你的内容 -->
    </happy-scroll>

    也可以设置百分比来限制最小长度(可视区域 * min-length-h)。假设可视区域的宽度为300px,那么滚动条为60px

    min-length-h小于1的时候,会将其当作百分比来处理。

min-length-v (*new)

  • 类型NUmber

  • 默认值40

  • 单位px

  • 用法

    <happy-scroll :min-length-v="20">
      <!-- 你的内容 -->
    </happy-scroll>

    设置 竖向滚动条最小的长度,当元素无限长或者宽的时候,会导致滚动条无限小,这种情况可以使用该属性。来设置最小的长度。

    <happy-scroll :min-length-v="0.2">
      <!-- 你的内容 -->
    </happy-scroll>

    也可以设置百分比来限制最小长度(可视区域 * min-length-v)。假设可视区域的高度为200px,那么滚动条为40px

    min-length-h小于1的时候,会将其当作百分比来处理。

scroll-top

  • 类型Number|String

  • 默认值0

  • 修饰符sync

  • 用法:

    <happy-scroll scroll-top="20">
      <!-- 你的内容 -->
    </happy-scroll>
    <!-- 也可以增加 .sync 保持scroll-top同步 -->
    <happy-scroll scroll-top.sync="20">

    在组件mounted之后,设置容器距离顶部的距离。

    相当于element.scrollTop 一致。

    scroll-top的值会自动转换为数字,所以当值为固定的数字时(使用+转换的),你无需增加:(v-bind),直接写为scroll-top="20"即可。

scroll-left

  • 类型Number|String

  • 默认值0

  • 修饰符sync

  • 用法:

    <happy-scroll scroll-left="20">
      <!-- 你的内容 -->
    </happy-scroll>
    <!-- 也可以增加 .sync 保持scroll-left -->
    <happy-scroll scroll-top.left="20">

    在组件mounted之后,设置容器距离左边的距离。

    相当于element.scrollLeft 一致。

hide-vertical

  • 类型 Boolean

  • 默认值 false

  • 用法:

    <!-- 表示隐藏竖向滚动条 -->
    <happy-scroll hide-vertical>
      <!-- 你的内容 -->
    </happy-scroll>

    隐藏竖向滚动条

hide-horizontal

  • 类型 Boolean

  • 默认值 false

  • 用法:

    <!-- 表示隐藏横向滚动条 -->
    <happy-scroll hide-horizontal>
      <!-- 你的内容 -->
    </happy-scroll>

    隐藏横向滚动条

    如果你不需要横向出现滚动条,可以设置hide-horizontal来提高性能。

resize

  • 类型Boolean

  • 默认值false

  • 用法:

    <!-- 表示开启监听容器大小变化 -->
    <happy-scroll resize>
      <!-- 你的内容 -->
    </happy-scroll>

    如果你的容器大小是变化的(高度或者宽度可能随时发生变化的情况),可使用resize来开启对容器大小变化的监听,当容器宽高大于你设定的宽高时,会自动出现滚动条,反正会自动隐藏滚动条。

    此功能当前版本依赖 element-resize-detector,目前正在寻找性能更高的办法,当然此插件的性能还是可以肯定的

smaller-move-h、smaller-move-v

  • 类型String

  • 默认值''

  • 可选值:

    1. start
    2. end
    3. 1、2的值之外,其他所有值都认为是默认值
  • 用法:

    <happy-scroll smaller-move-v="start">
      <!-- 你的内容 -->
    </happy-scroll>

    resize=true时,此配置才有效。

    该属性表示当容器变小时,滚动条移动的方向。

    • smaller-move-h 内容变小时,横向滚动条移动的方向
    • smaller-move-v 内容变小时,竖向滚动条移动的方向

    当设置为start时,表示变小之后,滚动条会移动到头部(对竖向滚动条来说是最上边,对横向滚动条来说是最左边)

    当设置为end时,表示变小之后,滚动条会移动到尾部(对竖向滚动条来说是最下边,对横向滚动条来说是最右边)

    当设置为''(默认值)时,表示在变小时,滚动条的位置不发生变化。

bigger-move-h、bigger-move-v

  • 类型String

  • 默认值''

  • 可选值:

    1. start
    2. end
    3. 1、2的值之外,其他所有值都认为是默认值
  • 用法:

    <happy-scroll bigger-move-h="start">
      <!-- 你的内容 -->
    </happy-scroll>

    resize=true时,此配置才有效。

    该属性表示当容器大小变大时,滚动条移动的方向。

    属性值与smaller-move-h原理一致。

left

  • 类型Boolean

  • 默认值false

  • 用法:

    <happy-scroll left>
      <!-- 你的内容 -->
    </happy-scroll>

    表示设置竖向滚动条依靠在边。默认竖向滚动条在右边。

top

  • 类型Boolean

  • 默认值false

  • 用法:

    <happy-scroll top>
      <!-- 你的内容 -->
    </happy-scroll>

    表示设置横向滚动条依靠在边。默认横向滚动条在下边。v

throttle

  • 类型Number

  • 默认值14

  • 单位毫秒

  • 说明:

    设置鼠标拖动滚动条的节流时间,如果没有特殊的要求不建议修改此值。

事件

horizontal-start

  • 参数scrollLeft

    horizontal-start事件下,scrollLeft始终为0

  • 说明 监听横向滚动条滚动到头部的事件。当scroll-left = 0时会触发该事件。

    <happy-scroll @horizontal-start="yourHandler">
      <!-- 你的内容 -->
    </happy-scroll>

horizontal-end

  • 参数scrollLeft

  • 说明 监听横向滚动条滚动到尾部的事件。

    <happy-scroll @horizontal-end="yourHandler">
      <!-- 你的内容 -->
    </happy-scroll>

vertical-start

  • 参数scrollTop

    vertical-start事件下,scrollTop始终为0

  • 说明 监听竖向滚动条滚动到头部的事件。当scroll-top = 0时会触发该事件。

    <happy-scroll @vertical-start="yourHandler">
      <!-- 你的内容 -->
    </happy-scroll>

vertical-end

  • 参数scrollTop

  • 说明 监听竖向滚动条滚动到尾部的事件。

    <happy-scroll @vertical-end="yourHandler">
      <!-- 你的内容 -->
    </happy-scroll>

PR

期待并欢迎您的PR。 但请您一定要遵守standard代码风格规范。 并且您只需要提交src目录下的源码即可,无需提交build之后的代码

MIT

MIT

Copyright (c) 2017-present, 唐道海

vue-happy-scroll's People

Contributors

tangdaohai avatar zhangweiii avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue-happy-scroll's Issues

点击滚动

现在没有点击滚动的效果么,比如说浏览器的滚动条,点击滚动条下边的空白部分,滚动条会随之滚动到鼠标点击地方

.happy-scroll-container 高度不能动态自动计算的问题

问题

Hi,@tangdaohai 遇到一个问题,先看下我的 HTML代码结构:

<div class="content-wrapper">
  <div  class="happy-scroll">
    <div class="happy-scroll-container" style="width: 320px;height: 210px;">
     <div class="happy-scroll-content">
      <div id="layers">/* 很长的内容 */</div>
      </div>
    </div>
  </div>
</div>

.content-wrapper容器的高度可以通过一个鼠标上拉改变高度。导致一个问题是,即使 .content-wrapper 高度改变了,但是 div#layers 的高度未变,其原因是 .happy-scroll-container 高度是内联固定值

需求

上拉改变容器高度时,.happy-scroll-container 高度可以自动计算高度决定是否隐藏和显示滚动条

求助啊.非常急

vue-happy-scroll 当浏览器小窗口打开的时候, 页面布置好了,当点击浏览器全屏的时候,这个时候,在vue-happy-scroll中的元素快,并不会跟着缩放,而不在happy-scroll中的元素就缩放了, 用resize 也没效果, 请问,我应该如何解决?

鼠标滚动触发横向滚动

现在是只有垂直方向可以用鼠标滚动滚动条,水平的不可以,虽然说也可以通过鼠标滚轮监听实现该功能,监听结束与开始事件,进行横向鼠标滚动

火狐浏览器兼容性问题

在谷歌浏览器 360浏览器中 加在左侧导航上,显示正确
image

但是在火狐浏览器中会为整个页面包括左侧导航和右侧主要内容板块一起添加滚动条
image

子组件是v-for渲染的bug

Error in nextTick: "TypeError: Cannot read property '0' of undefined"

<happy-scroll resize>
<div>
<div v-for>
item
</div>
</div>
 </happy-scroll>

但是外面像这样再嵌套一层就不报了

使用element-ui的collapse组件时,有20像素被遮盖。

使用element-ui的collapse组件,使用v-if打开关闭后会被遮盖20像素,发现打开关闭后isScrollNotUseSpace元素是undefined。
解决:
scroll.vue文件
331行Vue._happyJS._isScrollNotUseSpace !== undefined改成this.isScrollNotUseSpace !== undefined即可。

关于vue-happy-scroll内部的东西是循环出来的问题

您好作者,我的vue-happy-scroll内部的东西是通过v-for循环出来的。但是在页面上面happy-scroll-container这个元素宽和高却是20px,而且控件的滚动事件也被禁用了。我查了一下,网上说循环的外面需要包裹一层盒子,我试着用一个div把循环的内容包裹起来,但是页面依然还是那样,请问我是哪个地方调用错误了吗

加上了resize无效

加上了resize属性,但是浏览器窗口resize的时候,happy-scroll滚动条还存在???
是我配置出错了吗?
请问怎么解决?

滚动条显示位置兼容性问题

在谷歌浏览器 360浏览器中 加在左侧导航上,显示正确
image
但是在火狐浏览器中会为整个页面包括左侧导航和右侧主要内容板块一起添加滚动条
image

滚动内容区域始终很小

使用时,按照说明在happy-scroll标签内外都设置了div包裹happy-scroll和滚动内容,但发现有效滚动区域始终为半个字大小。
项目结合element-ui使用,是否element-ui对该组件有影响?

建议

1-可否有一个监测外部窗口resize事件的接口,或者一个参数能从外部触发,

2-与elementUI中tabTabs 标签页这样的插件配合使用,每个tab内容中都会有子滚动区域,只有第一个显示的才会有正确的宽高计算,因为happy-scroll如果内容不变,只在mounted计算一次,导致后面的视图宽高为0,这个问题我加了一个v-if可以解决,

3-插件有兼容问题吗?我写的案例在火狐下的高度计算container层和content层高度全为内容的高度,导致无法滚动,谷歌正常.

出现Cannot read property '0' of undefined

我什么都在里面添加,只是引用了这个组件,就显示 Cannot read property '0' of undefined at o.computeStripX (happy-scroll.min.js?b355:1)这个错误。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.