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

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

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

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

在實(shí)際項(xiàng)目中,遇到上下滾動(dòng)條和左右滾動(dòng)條不在一個(gè)DIV內(nèi)部,所以某些情況下,右側(cè)滾動(dòng)條不可見。但是需要咋同一個(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)按下,開始拖動(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è)有沒有必要設(shè)置) */ onMouseUp = () => { if (this.state.isDraging) { setTimeout(() => {this.setState({ isDraging: false, clickX: 0 }); }, 100); } } /** * 當(dāng)拖拽進(jìn)行時(shí)(鼠標(biāo)按下并開始移動(dòng)),獲取當(dāng)前的位移,計(jì)算新的偏移量 * 注意:可以向右滾動(dòng),可以向左滾動(dòng) * 當(dāng)拖拽進(jìn)行時(shí),應(yīng)該計(jì)算出當(dāng)前的比例,然后Grid水平滾動(dòng) * 現(xiàn)在的問題,如果鼠標(biāo)拖動(dòng)時(shí)移動(dòng)到滾動(dòng)條外部,那么無法觸發(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)不能超過右側(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)條也有很多開源第三方組件,我們優(yōu)先使用第三方庫實(shí)現(xiàn)(處理滾動(dòng)條計(jì)算考慮情況較多)

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产传媒在线| 精品日韩一区| 美女网站视频一区| av在线最新| 日韩电影免费网址| 国产夫妻在线| 激情视频网站在线播放色| 狠狠躁少妇一区二区三区| 中文字幕在线官网| 精品捆绑调教一区二区三区| 黄在线观看免费网站ktv| 91看片一区| 国产在线不卡| 丝袜美腿高跟呻吟高潮一区| 久久国产精品毛片| 美女性感视频久久| 国产91欧美| 天堂中文在线播放| 免费精品国产的网站免费观看| 狠狠干成人综合网| 日本在线一区二区三区| 日本欧美在线| 久久久久九九精品影院| 色婷婷色综合| 一区在线免费观看| 亚洲+小说+欧美+激情+另类| 国产精品日韩精品中文字幕| 一区二区精品伦理...| 亚洲一级影院| 综合激情一区| 国产欧美三级| 水蜜桃久久夜色精品一区| 欧美美女一区| 日韩av一二三| zzzwww在线看片免费| 欧美日韩在线网站| 奶水喷射视频一区| 日本少妇精品亚洲第一区| 久久久精品国产**网站| 日韩大片在线观看| 亚洲深夜福利在线观看| 国产免费av一区二区三区| 欧美国产一级| 久久大逼视频| 麻豆精品蜜桃视频网站| 亚洲h色精品| 日韩一区网站| 日韩理论片av| 亚洲精品护士| 91日韩在线| 丝袜脚交一区二区| 狠狠久久伊人中文字幕| 中文一区在线| 久久亚洲人体| 国产婷婷精品| 精品伊人久久| 欧美女激情福利| 国产精品白丝久久av网站| 精品日韩视频| 久久精品超碰| av在线日韩| 日本午夜精品久久久| 91精品啪在线观看国产18| 日韩av资源网| 婷婷成人综合| 免费看久久久| 免费日韩av| 日韩国产欧美一区二区| 日韩一区二区三区在线看| 国产99久久久国产精品成人免费| 国产亚洲欧美日韩在线观看一区二区| 亚洲爱爱视频| 国产精品伊人| 99国产一区| 国产一区二区三区网| 国产精品外国| 国产精品国产一区| 日韩高清三区| 日韩亚洲国产欧美| 国产精品精品| 91精品国产自产观看在线| 亚洲天堂久久| 久久中文字幕导航| 日韩欧美美女在线观看| 97欧美在线视频| 欧美另类中文字幕| 亚洲免费婷婷| 日本精品影院| 六月丁香综合在线视频| 日韩一区欧美二区| av资源亚洲| 国产精品亚洲二区| 亚洲欧洲av| 亚洲激情黄色| 91精品国产乱码久久久久久久| 狠狠久久伊人中文字幕| 国产亚洲一卡2卡3卡4卡新区| 视频精品一区二区| 国精品一区二区三区| 97在线精品| 免费精品一区| 欧美激情综合| 国产精品调教| 国产日本久久| 日韩精品免费一区二区夜夜嗨| 欧美网站在线| 99精品视频精品精品视频| 国产不卡人人| av中文资源在线资源免费观看| 欧美激情99| 国产精品久久久久9999高清| 日韩国产一区二| 亚洲精品动态| 国产精品嫩草99av在线| 91久久视频| 蜜桃成人av| 亚洲二区在线| 免费视频国产一区| 99热国内精品| 日韩欧美二区| 亚洲不卡av不卡一区二区| 亚洲三级欧美| 亚洲黄色免费看| 91精品韩国| 日韩欧美一区二区三区免费观看| bbw在线视频| 久久久久久夜| 亚洲天堂免费电影| 午夜精品成人av| 日本不良网站在线观看| www.51av欧美视频| 88xx成人免费观看视频库| 99成人超碰| 在线亚洲自拍| 亚洲精品激情| 久久精品72免费观看| 日本91福利区| 久久av中文| 国产一二在线播放| 免费污视频在线一区| 亚洲午夜电影| 亚洲一区区二区| 亚洲精品乱码| 国产欧美日韩一区二区三区在线| 国产探花在线精品| 美女高潮久久久| 日韩成人a**站| 欧美日韩激情在线一区二区三区| 99国产一区| 日韩不卡在线观看日韩不卡视频| 麻豆91在线播放| 亚洲精品福利电影| 欧美精品自拍| 日本aⅴ免费视频一区二区三区| 欧美日韩精品一区二区三区在线观看| 国产精品白丝av嫩草影院| 日韩电影免费网站| 99国内精品| 国产日韩免费| 成人国产综合| 激情五月色综合国产精品| 亚洲日本三级| 国产精品videossex久久发布 | 欧美aa一级| 亚洲国产一区二区三区在线播放| 久久国产精品99国产| 国产精品欧美在线观看| 亚洲伦乱视频| 蜜桃久久久久久| 麻豆精品新av中文字幕| 欧美成人精品| 国产精品一区毛片| 久久久影院免费| 日韩三级精品| 国产美女高潮在线| 免费成人性网站| 久久影视三级福利片| 不卡中文一二三区| 久久精品xxxxx| 久久久精品日韩| 亚州av日韩av| 日韩精品91| 青青草91视频| 婷婷成人在线| 国产精品巨作av| 激情五月综合网| 国产精品18| 欧美日韩国产综合网| 欧美精品二区| av不卡免费看| 国产成人精品亚洲线观看| 久久av中文| 美女被久久久| 国产精品久久久久蜜臀 | 在线综合亚洲| 国产成人久久| 日韩欧美中文字幕在线视频| 国产aa精品| 日韩国产在线一| 99久久婷婷这里只有精品|