日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript實(shí)現(xiàn)自定義滾動(dòng)條效果

瀏覽:15日期:2023-12-13 13:24:24

在實(shí)際項(xiàng)目中,遇到上下滾動(dòng)條和左右滾動(dòng)條不在一個(gè)DIV內(nèi)部,所以某些情況下,右側(cè)滾動(dòng)條不可見(jiàn)。但是需要咋同一個(gè)視口內(nèi)顯示兩個(gè)滾動(dòng)條。

一個(gè)解決思路是:自定義滾動(dòng)條,隱藏原始滾動(dòng)條。

自定義滾動(dòng)條

scrollbar.js

import React, { Component } from ’react’;import PropTypes from ’prop-types’;import ’../css/scrollbar.css’;const propTypes = { eventBus: PropTypes.object.isRequired,};class ScrollBar extends Component { constructor(props) { super(props); this.state = { isDraging: false, // X: bottom scrollbar offset left, range [0, innerWidth - 100]. When dragging, x is changing x: null, // clickX 表示拖動(dòng)滾動(dòng)條時(shí),鼠標(biāo)點(diǎn)擊的位置距離滾動(dòng)條左側(cè)的距離, range [0, 100], When dragging, clickX isn’t changing clickX: 0, }; } componentDidMount() { this.unsubscribeScrollToColumn = this.props.eventBus.subscribe(’set-scrollbar-left’, this.setScrollBarLeft); document.addEventListener(’mouseup’, this.onMouseUp); } componentWillUnmount() { this.unsubscribeScrollToColumn(); document.removeEventListener(’mouseup’, this.onMouseUp); } /** * 這個(gè)函數(shù)處理聯(lián)動(dòng)(界面滾動(dòng)時(shí),觸發(fā)滾動(dòng)條滾動(dòng))這里的100是滾動(dòng)條的寬度 */ setScrollBarLeft = (leftRatio) => { // when bottom scrollbar is dragging, can’t set scrollBa left if (this.state.isDraging) return; this.setState({ x: (window.innerWidth - 100) * leftRatio, }); } /** * 當(dāng)鼠標(biāo)按下,開(kāi)始拖動(dòng),設(shè)置當(dāng)前的位置為初始拖動(dòng)的位置 */ handleMouseDown = (e) => { this.setState({ isDraging: true, clickX: e.nativeEvent.offsetX, }); } /** * 當(dāng)鼠標(biāo)抬起時(shí),停止拖拽,設(shè)置當(dāng)前的點(diǎn)擊位置是0(這個(gè)有沒(méi)有必要設(shè)置) */ onMouseUp = () => { if (this.state.isDraging) { setTimeout(() => {this.setState({ isDraging: false, clickX: 0 }); }, 100); } } /** * 當(dāng)拖拽進(jìn)行時(shí)(鼠標(biāo)按下并開(kāi)始移動(dòng)),獲取當(dāng)前的位移,計(jì)算新的偏移量 * 注意:可以向右滾動(dòng),可以向左滾動(dòng) * 當(dāng)拖拽進(jìn)行時(shí),應(yīng)該計(jì)算出當(dāng)前的比例,然后Grid水平滾動(dòng) * 現(xiàn)在的問(wèn)題,如果鼠標(biāo)拖動(dòng)時(shí)移動(dòng)到滾動(dòng)條外部,那么無(wú)法觸發(fā)拖動(dòng) * */ onMouseMove = (e) => { e.persist(); if (this.state.isDraging) { // 新距離 = 原始距離 + (當(dāng)前滾動(dòng)的距離 - 初始滾動(dòng)的距離) let newX = this.state.x + e.nativeEvent.offsetX - this.state.clickX; newX = Math.min(newX, window.innerWidth - 100); // 最大的拖動(dòng)不能超過(guò)右側(cè)邊界 this.setState({ x: newX }); const leftRatio = newX / (window.innerWidth - 100); } } renderBottomToolbar = () => { return ( <divclassName='antiscroll-scrollbar antiscroll-scrollbar-horizontal antiscroll-scrollbar-shown'style={{transform: `translateX(${this.state.x}px)`}}draggable='true'onMouseDown={this.handleMouseDown}onMouseMove={this.onMouseMove}onMouseUp={this.onMouseUp} ></div> ); } // todo: rightToolbar event handle renderRightToolbar = () => { return ( <divclassName='antiscroll-scrollbar antiscroll-scrollbar-vertical antiscroll-scrollbar-shown' ></div> ); } render() { return ( <div className='antiscroll-wrap'>{this.renderBottomToolbar()}{this.renderRightToolbar()} </div> ); }}ScrollBar.propTypes = propTypes;export default ScrollBar;滾動(dòng)條樣式

對(duì)應(yīng)的 scrollbar.css

#scrollOverlay { display: inline-block; overflow: hidden; position: fixed; left: 0; right: 0; top: 156px; bottom: 0; z-index: 4; pointer-events: none; opacity: .7;}#scrollOverlay .antiscroll-scrollbar { pointer-events: auto; z-index: 2; background-color: hsla(0,0%,0%,0.28); box-shadow: inset 0 0 0 1px hsl(0,0%,100%); border-radius: 5px;}#scrollOverlay .antiscroll-scrollbar-horizontal { height: 12px; width: 100px; position: absolute; bottom: 32px;}#scrollOverlay .antiscroll-scrollbar-vertical { width: 12px; height: 100px; position: absolute; right: 0;}/* 隱藏原始滾動(dòng)對(duì)象的滾動(dòng)條 */.react-demo::-webkit-scrollbar { width: 0;}滾動(dòng)條具體使用

具體使用,我們?cè)?Grid 中加入這個(gè)滾動(dòng)條

import ScrollBar from ’../components/scrollbar’;// Grid 原生滾動(dòng),觸發(fā)回調(diào)函數(shù)onScroll = () => { // todo: when clientWidth is smaller than innerWidth, don’t show bottom scrollBar let scrollLeftRatio = this._scrollLeft / (clientWidth - window.innerWidth); // 當(dāng)原生DOM左右滾定時(shí),獲取當(dāng)前滾動(dòng)的比例(偏移量/全部寬度),并設(shè)置滾動(dòng)條進(jìn)行滾動(dòng) this.setScrollLeftRatio(scrollLeftRatio);}setScrollLeftRatio = (scrollLeftRatio) => { this.props.eventBus.dispatch(’set-scrollbar-left’, scrollLeftRatio);}// 在原始滾動(dòng)元素中,傳入eventBus,便于事件傳值處理// <ScrollBar eventBus={this.props.eventBus}/>

自定義滾動(dòng)條也有很多開(kāi)源第三方組件,我們優(yōu)先使用第三方庫(kù)實(shí)現(xiàn)(處理滾動(dòng)條計(jì)算考慮情況較多)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲综合小说| 亚洲一区有码| 国产高清亚洲| 国产情侣一区在线| 国产精品久久久一区二区| 日韩久久99| 日韩极品在线观看| 日韩av午夜在线观看| 日韩精品免费一区二区夜夜嗨 | 午夜一级在线看亚洲| 亚洲一区二区毛片| 亚洲精品三级| 日本午夜精品一区二区三区电影| 欧美视频二区| 精品免费视频| 麻豆理论在线观看| 日韩精品首页| 国产精品视区| 日韩三级精品| 国产精品成人自拍| 亚洲欧洲高清| 午夜久久tv| 日本午夜精品久久久久| 欧美aa在线视频| 日本久久综合| 伊人久久成人| 奇米狠狠一区二区三区| 成人精品国产亚洲| 国产一区日韩一区| 三级久久三级久久久| 国产精品激情| 激情久久中文字幕| 日本亚州欧洲精品不卡| 久久一区欧美| 免费黄色成人| 久久国产生活片100| 日韩久久一区二区三区| 国产视频一区免费看| 欧美偷窥清纯综合图区| 高清av一区| 快she精品国产999| 乱一区二区av| 香蕉久久久久久久av网站| 国产欧美日韩一区二区三区四区 | 国产黄色精品| 欧美成人国产| 日韩欧美中文字幕一区二区三区| 美女毛片一区二区三区四区最新中文字幕亚洲 | 久久精品国产一区二区| 欧美粗暴jizz性欧美20| 91欧美极品| 久久婷婷av| 国产探花在线精品一区二区| 亚洲爱爱视频| 日韩高清三区| 在线人成日本视频| 蜜臀av在线播放一区二区三区 | 日韩精品永久网址| 日本亚洲欧美天堂免费| 免费一二一二在线视频| 日韩精品免费一区二区夜夜嗨| 精品黄色一级片| 亚洲欧美日韩精品一区二区| 国产成人77亚洲精品www| 亚洲中字黄色| 日韩福利一区| 国产日本精品| 亚洲一区欧美二区| 黑森林国产精品av| 欧美日韩18| 亚洲一区二区免费看| 成人一区而且| 91欧美极品| 99pao成人国产永久免费视频| 国产96在线亚洲| 欧美亚洲综合视频| 女人天堂亚洲aⅴ在线观看| 欧美激情视频一区二区三区免费| 亚洲综合二区| 久久精品观看| 精品国产乱码| 国产亚洲久久| 亚洲一级大片| 极品日韩av| 黄色aa久久| 麻豆国产一区| 91精品国产自产观看在线 | 亚洲国内精品| 日韩视频网站在线观看| 老色鬼精品视频在线观看播放| 日韩中文字幕区一区有砖一区| 天堂网av成人| 国产一区2区| 国产精品久久久久久久久久久久久久久| 六月婷婷一区| 久久国产毛片| 久久久男人天堂| 麻豆成人综合网| 久久国际精品| 日韩av在线播放中文字幕| 爽好久久久欧美精品| 国产综合婷婷| 成人羞羞视频播放网站| 97视频热人人精品免费| 精品网站999| 国产欧美日韩在线观看视频| 日韩高清中文字幕一区| 色综合视频一区二区三区日韩 | 国产精品视区| 欧美福利在线| 91久久国产| 亚洲午夜黄色| 久久一级电影| 香蕉精品久久| 国产精品av久久久久久麻豆网| 天堂资源在线亚洲| 欧美精品羞羞答答| 不卡中文一二三区| 亚洲激情不卡| 亚洲一区成人| 在线看片日韩| 日韩二区在线观看| 国产欧美一区二区三区精品观看| 亚洲一二三区视频| 日韩久久99| 国产精品一区高清| 鲁大师精品99久久久| 精品国产99| 黄色在线网站噜噜噜| 新版的欧美在线视频| 久久精品国产www456c0m| 欧美 日韩 国产精品免费观看| 亚洲一区二区网站| 日欧美一区二区| 国产精品免费不| 精品一区二区三区中文字幕| 福利一区二区免费视频| 色综合www| 亚洲欧美伊人| 丝袜美腿亚洲一区| 日本91福利区| 美女久久精品| 99久久精品费精品国产| 老牛影视一区二区三区| 91成人在线| yellow在线观看网址| 亚洲精品成人| 日本不卡的三区四区五区| 另类综合日韩欧美亚洲| 视频福利一区| 综合国产在线| 老司机免费视频一区二区三区| | 色婷婷精品视频| 亚洲欧美高清| 欧美日韩中文| 欧美日韩视频免费观看| 日韩精品一卡二卡三卡四卡无卡| 青青草91视频| 亚洲午夜天堂| 视频一区中文字幕国产| 国产精品一区免费在线| 久久久成人网| 日韩av午夜在线观看| 91免费精品| 视频一区在线视频| 精品精品99| 日韩视频不卡| 国产精品亲子伦av一区二区三区 | 免费日本视频一区| 国产精品成人一区二区网站软件| 播放一区二区| 日韩精品免费观看视频| 日本精品国产| 日韩不卡在线| 日韩精品福利一区二区三区| 精品国产91| 一区二区三区四区在线观看国产日韩 | 免费视频亚洲| 欧美日韩亚洲一区三区| 亚洲v在线看| 日韩av一区二区在线影视| 亚洲伦乱视频| 国产三级一区| 亚州av乱码久久精品蜜桃| 欧美永久精品| 激情婷婷亚洲| 精品资源在线| 蜜桃视频免费观看一区| 福利一区视频| 婷婷久久免费视频| 影视先锋久久| 欧美日本一区| 日韩视频一区二区三区在线播放免费观看 | 香蕉国产精品| 成人在线超碰| 日韩精品1区2区3区| 久久一区二区三区电影| 欧美精品99| 亚洲欧洲专区|