日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > vue >内容正文

vue

vue 滚动条_轻量级 React.js 虚拟美化滚动条组件RScroll

發(fā)布時(shí)間:2024/8/5 vue 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue 滚动条_轻量级 React.js 虚拟美化滚动条组件RScroll 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前幾天有給大家分享一個(gè)Vue自定義滾動(dòng)條組件VScroll。今天再分享一個(gè)最新開(kāi)發(fā)的React PC端模擬滾動(dòng)條組件RScroll。

vue+pc桌面端模擬滾動(dòng)條組件VScroll

rscroll 一款基于react.js構(gòu)建的超小巧自定義桌面端美化滾動(dòng)條。支持原生滾動(dòng)條、自動(dòng)隱藏、滾動(dòng)條尺寸/層級(jí)/顏色等功能。

如上圖:支持垂直/水平滾動(dòng)條。

功能及效果和之前VScroll保持一致。在開(kāi)發(fā)支持參考借鑒了el-scrollbar等組件設(shè)計(jì)思想。

調(diào)用非常簡(jiǎn)單,只需包裹住內(nèi)容即可快速生成一個(gè)漂亮的滾動(dòng)條。

引入組件

// 引入滾動(dòng)條組件RScrollimport RScroll from './components/rscroll'

快速使用

這里是內(nèi)容信息!這里是內(nèi)容信息!這里是內(nèi)容信息!

這里是內(nèi)容信息!這里是內(nèi)容信息!這里是內(nèi)容信息!

這里是內(nèi)容信息!這里是內(nèi)容信息!這里是內(nèi)容信息!

這里是內(nèi)容信息!這里是內(nèi)容信息!這里是內(nèi)容信息!

編碼實(shí)現(xiàn)

在components目錄下新建rscroll目錄,并創(chuàng)建index.js頁(yè)面。

rscroll滾動(dòng)條模板

render() { return ( this.$ref__box = el} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}> this.$ref__wrap = el} onScroll={this.handleScroll}> {prop.children} {/* 滾動(dòng)條 */} this.$ref__barY = el} onMouseDown={this.handleDragThumb.bind(this, 0)} style={{background: prop.color, height: opt.barHeight+'px'}}> this.$ref__barX = el} onMouseDown={this.handleDragThumb.bind(this, 1)} style={{background: prop.color, width: opt.barWidth+'px'}}> )}

react監(jiān)聽(tīng)元素/DOM尺寸變化。由于react不像vue可以自定義指令directives,只能使用componentDidUpdate來(lái)監(jiān)聽(tīng)。

componentDidUpdate(preProps, preState) { // 監(jiān)聽(tīng)內(nèi)層view DOM尺寸變化 let $view = this.$ref__wrap.querySelector('.vscroll__view') const viewStyle = $view.currentStyle ? $view.currentStyle : document.defaultView.getComputedStyle($view, null); if(preState.$viewWidth !== viewStyle.width || preState.$viewHeight !== viewStyle.height) { this.setState({ $viewWidth: viewStyle.width, $viewHeight: viewStyle.height }) this.updated() }}/** * ReactJs|Next.js自定義滾動(dòng)條組件RScroll */import React from 'react'class RScroll extends React.Component { /** * 默認(rèn)配置 */ static defaultProps = { // 是否顯示原生滾動(dòng)條 native: false, // 鼠標(biāo)滑出是否自動(dòng)隱藏滾動(dòng)條 autohide: false, // 自定義滾動(dòng)條大小 size: '', // 自定義滾動(dòng)條顏色 color: '', // 滾動(dòng)條層級(jí) zIndex: null } constructor(props) { super(props) this.state = { barWidth: 0, // 滾動(dòng)條寬度 barHeight: 0, // 滾動(dòng)條高度 ratioX: 1, // 滾動(dòng)條水平偏移率 ratioY: 1, // 滾動(dòng)條垂直偏移率 isTaped: false, // 鼠標(biāo)光標(biāo)是否按住滾動(dòng)條 isHover: false, // 鼠標(biāo)光標(biāo)是否懸停在滾動(dòng)區(qū) isShow: !this.props.autohide, // 是否顯示滾動(dòng)條 $viewWidth: null, $viewHeight: null, } } // 鼠標(biāo)滑入 handleMouseEnter = () => { this.setState({ isHover: true, isShow: true }) this.updated() } // 鼠標(biāo)滑出 handleMouseLeave = () => { const { isTaped } = this.state this.setState({ isHover: false }) this.setState({ isShow: false }) } // 拖動(dòng)滾動(dòng)條 handleDragThumb = (index, e) => { let _this = this this.setState({ isTaped: true }) const { ratioX, ratioY } = this.state let c = {} // 阻止默認(rèn)事件 domUtils.isIE() ? (e.returnValue = false, e.cancelBubble = true) : (e.stopPropagation(), e.preventDefault()) document.onselectstart = () => false if(index == 0) { c.dragY = true c.clientY = e.clientY }else { c.dragX = true c.clientX = e.clientX } domUtils.on(document, 'mousemove', function(evt) { if(_this.state.isTaped) { if(c.dragY) { _this.$ref__wrap.scrollTop += (evt.clientY - c.clientY) * ratioY _this.$ref__barY.style.transform = `translateY(${_this.$ref__wrap.scrollTop / ratioY}px)` } if(c.dragX) { _this.$ref__wrap.scrollLeft += (evt.clientX - c.clientX) * ratioX _this.$ref__barX.style.transform = `translateX(${_this.$ref__wrap.scrollLeft / ratioX})` } } }) domUtils.on(document, 'mouseup', function() { _this.setState({ isTaped: false }) document.onmouseup = null document.onselectstart = null if(!_this.state.isHover && _this.props.autohide) { _this.setState({ isShow: false }) } }) } // 點(diǎn)擊滾動(dòng)槽 handleClickTrack = (index, e) => { // ... } // 更新滾動(dòng)區(qū) updated = () => { if(this.props.native) return let c = {} let barSize = domUtils.getScrollBarSize() // 垂直滾動(dòng)條 if(this.$ref__wrap.scrollHeight > this.$ref__wrap.offsetHeight) { c.barHeight = this.$ref__box.offsetHeight **2 / this.$ref__wrap.scrollHeight c.ratioY = (this.$ref__wrap.scrollHeight - this.$ref__box.offsetHeight) / (this.$ref__box.offsetHeight - c.barHeight) this.$ref__barY.style.transform = `translateY(${this.$ref__wrap.scrollTop / c.ratioY}px)` // 隱藏系統(tǒng)滾動(dòng)條 if(barSize) { this.$ref__wrap.style.marginRight = -barSize + 'px' } }else { c.barHeight = 0 this.$ref__barY.style.transform = '' this.$ref__wrap.style.marginRight = '' } // 水平滾動(dòng)條 ... } // 鼠標(biāo)滾動(dòng) handleScroll = (e) => { const { onScroll } = this.props typeof onScroll === 'function' && onScroll.call(this, e) this.updated() } render() { return ( // ... ) }}export default RScroll

這里是內(nèi)容信息!這里是內(nèi)容信息!這里是內(nèi)容信息!

// 監(jiān)聽(tīng)滾動(dòng)事件handleScroll = (e) => { let _scrollTop = e.target.scrollTop let _scrollStatus // 判斷滾動(dòng)狀態(tài) if(e.target.scrollTop == 0) { _scrollStatus = '滾到至頂部' } else if(e.target.scrollTop + e.target.offsetHeight >= e.target.scrollHeight) { _scrollStatus = '滾動(dòng)至底部' }else { _scrollStatus = '正滾動(dòng)中..' } this.setState({ scrollTop: _scrollTop, scrollStatus: _scrollStatus })}

好了,以上就是基于react.js開(kāi)發(fā)自定義美化滾動(dòng)條組件。希望大家能喜歡~~

總結(jié)

以上是生活随笔為你收集整理的vue 滚动条_轻量级 React.js 虚拟美化滚动条组件RScroll的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色综合天天综合综合国产 | 在线观看中文字幕第一页 | 亚洲一二三四 | 啪啪综合 | www.国产在线| 中文字幕免费高清网站 | 欧美自拍区 | 影音先锋波多野结衣 | 成人激情在线视频 | 国产真实的和子乱拍在线观看 | 日韩女同一区二区三区 | 粗大黑人巨茎大战欧美成人 | 中文字幕首页 | 少妇特黄a一区二区三区 | 国产一区二区小说 | 中文毛片| 牛牛视频在线观看 | 欧美色涩在线第一页 | 国产人成无码视频在线观看 | 91高清视频| 精品在线你懂的 | a级在线观看视频 | 国产乱淫av片杨贵妃 | 久久h视频 | 日韩av在线播放不卡 | 极品新婚夜少妇真紧 | 91蜜桃婷婷狠狠久久综合9色 | 免费一级网站 | 亚洲综合狠狠 | 欧美黄色大片视频 | 无码免费一区二区三区免费播放 | 免费又黄又爽又色的视频 | 91亚洲专区 | 国产精品久久久久久久久 | 日韩在线高清 | 久久久久亚洲色欲AV无码网站 | 国产成人三级一区二区在线观看一 | 荫道bbwbbb高潮潮喷 | 日韩av地址| jizz国产免费 | 亚洲第一天堂久久 | 9191久久| 日韩免费视频 | 深爱激情综合 | 国产主播在线看 | 日韩中文字幕一区二区三区 | 亚洲视频黄色 | 久久久久亚洲av成人毛片韩 | 久久欧美精品 | 国产在线观看www | 在线观看av资源 | 亚洲 欧美 精品 | aa一级片| 日韩色在线 | 韩国午夜av| 国产中年熟女高潮大集合 | 偷偷操视频 | 葵司免费一区二区三区四区五区 | 中文字幕av片 | 欧美xxxx性xxxxx高清 | 特色特色大片在线 | 成人短视频在线播放 | 日本欧美一区二区三区不卡视频 | 欧美亚洲另类视频 | 中文字幕第八页 | 波多野结衣福利 | 国产精品久久久久久亚洲毛片 | 午夜写真片福利电影网 | xxxx 国产 | 亚洲香蕉网站 | 午夜不卡久久精品无码免费 | 不卡在线播放 | 国产熟妇另类久久久久 | 校园春色综合网 | 最新天堂中文在线 | 黄色片免费视频 | 免费的一级片 | 国产精品无码在线播放 | 中日韩男男gay无套 人人草人人干 | 天天插日日插 | 偷拍青青草 | 日本艳妇 | 欧美在线网 | 九色视频在线观看 | 稀缺呦国内精品呦 | 成人免费福利 | 波多野结衣av中文字幕 | 97精品人妻一区二区三区 | 欧美日韩不卡视频 | 老熟妇仑乱视频一区二区 | 亚洲av无码一区二区三区网站 | 精品一区二区三区免费 | 91精品婷婷国产综合久久 | 精品国产伦一区二区三区免费 | 亚洲av无码专区在线播放中文 | 精品一区电影 | 国产美女极度色诱视频www | 丁香八月婷婷 | 欧美日韩中文字幕在线观看 |