当前位置: 首页 > news >正文

原生横向滚动条 吸附 页面底部

效果图
在这里插入图片描述

/** 横向滚动条 吸附 页面底部 */
export class StickyHorizontalScrollBar {constructor(options = {}) {const { el, style = '' } = optionsthis.createScrollbar(style)this.insertScrollbar(el)this.setScrollbarSize()this.onEvent()}/** 创建滚轴组件元素 */createScrollbar = (style = '') => {if (this.scrollbar) return this.scrollbarconst timer = Date.now()this.thumbId = `thumb${timer}`this.scrollbarId = `scrollbar${timer}`this.scrollbar = document.createElement('div')this.scrollbar.setAttribute('id', this.scrollbarId)this.scrollbar.innerHTML = `<style>#${this.scrollbarId} {position: sticky;width: 100%;box-shadow: 0 15px 0 0 #fff;bottom: 8px;left: 0;height: 17px;overflow-x: auto;overflow-y: hidden;margin-top: -17px;z-index: 3;${style}}#${this.scrollbarId} #${this.thumbId} {height: 17px;}</style><div id="${this.thumbId}"></div>`}/** 把滚轴组件元素插入目标元素的后面 */insertScrollbar = (el) => {this.target = document.querySelector(el)if (!this.target) throw Error('el Dom do not exit')this.targetParentElement = document.querySelector(el).parentElementthis.targetIndex = [...this.targetParentElement.children].findIndex((item) => item === this.target)this.insertIndex = this.targetIndex + 1if (!this.targetParentElement.querySelector(`#${this.scrollbarId}`)) {if (this.insertIndex >= this.targetParentElement.children.length - 1) {this.targetParentElement.appendChild(this.scrollbar)} else {this.targetParentElement.insertBefore(this.scrollbar,this.targetParentElement.children[this.insertIndex])}}return this.target}/** 设置 滚轴组件元素尺寸 */setScrollbarSize = () => {this.scrollbar.style.width = this.target.clientWidth + 'px'this.scrollbar.querySelector(`#${this.thumbId}`).style.width =this.target.scrollWidth + 'px'}/** 监听目标元素和滚轴元素的scroll和页面resize事件 */onEvent = () => {this.target.addEventListener('scroll', this.onScrollTarget)this.scrollbar.addEventListener('scroll', this.onScrollScrollbar)window.addEventListener('resize', this.setScrollbarSize)}/** 移除事件 */removeEvent = () => {this.target.removeEventListener('scroll', this.onScrollTarget)this.scrollbar.removeEventListener('scroll', this.onScrollScrollbar)window.removeEventListener('resize', this.setScrollbarSize)}onScrollTarget = (e) => {this.scrollbar.scrollLeft = e.target.scrollLeft}onScrollScrollbar = (e) => {this.target.scrollLeft = e.target.scrollLeft}
}
//用法
const stickyScrollBar= new StickyScrollBar({el: '#container',
})//重新设置滚动条尺寸
stickyScrollBar.setScrollbarSize()
http://www.lryc.cn/news/252455.html

相关文章:

  • 1+x网络系统建设与运维(中级)-练习3
  • 知识图谱07——图片中表格开源ocr识别
  • 每日一练2023.12.4——正整数【PTA】
  • golang之net/http模块学习
  • Python中format函数用法
  • Android 断点调试
  • 对抗神经网络 CGAN实战详解 完整数据代码可直接运行
  • LeetCode417. Pacific Atlantic Water Flow
  • Python字符串模糊匹配工具:TheFuzz 库详解
  • Golang中WebSocket和WSS的支持
  • 亚马逊云科技re:Invent大会,助力安全构建规模化生成式AI应用
  • 价差后的几种方向,澳福如何操作才能盈利
  • 【Java】类和对象之超级详细的总结!!!
  • 机器学习的复习笔记3-回归的细谈
  • Git常用命令#切换分支
  • 【qml入门教程系列】:qml property使用介绍
  • pbootcms建站
  • Spring的事务传播行为
  • 04_网络编程
  • 【五分钟】熟练使用numpy.cumsum()函数(干货!!!)
  • 由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想
  • Python按要求从多个txt文本中提取指定数据
  • DFT新手教程:VASP中ISIF取值设置
  • pytest自动化框架之allure测试报告的用例描述设置
  • 在编程中遇到的问题总结
  • 【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(二)
  • easyexcel多级表头导出各级设置样式(继承HorizontalCellStyleStrategy实现)
  • QMLfor python pyside6
  • 几何教学工具 Sketchpad几何画板 mac软件特色
  • 华清远见嵌入式学习——C++——作业5