html任务3 模拟滚动条,vue3系列:vue3.0自定义虚拟滚动条V3Scroll

2023-11-18

/**

* @Desc Vue3.0虚拟滚动条组件V3Scroll

* @Time andy by 2021-01

* @About Q:282310962 wx:xy190310*/

props: {//...

},/**

* Vue3.x自定义指令写法*/

//监听DOM尺寸变化

directives: {'resize': {

beforeMount:function(el, binding) {

let width= '', height = '';functionget() {

const elStyle= el.currentStyle ? el.currentStyle : document.defaultView.getComputedStyle(el, null);if (width !== elStyle.width || height !==elStyle.height) {

binding.value({width, height});

}

width=elStyle.width;

height=elStyle.height;

}

el.__vueReize__= setInterval(get, 16);

},

unmounted:function(el) {

clearInterval(el.__vueReize__);

}

}

},

setup(props, context) {

const ref__box= ref(null)

const ref__wrap= ref(null)

const ref__barX= ref(null)

const ref__barY= ref(null)

const data=reactive({

barWidth:0, //滚动条宽度

barHeight: 0, //滚动条高度

ratioX: 1, //滚动条水平偏移率

ratioY: 1, //滚动条垂直偏移率

isTaped: false, //鼠标光标是否按住滚动条

isHover: false, //鼠标光标是否悬停在滚动区

isShow: !props.autohide, //是否显示滚动条

})

onMounted(()=>{

nextTick(()=>{

updated()

})

})//鼠标滑入

const handleMouseEnter = () =>{

data.isHover= truedata.isShow= trueupdated()

}//鼠标滑出

const handleMouseLeave = () =>{

data.isHover= falsedata.isShow= false}//拖动滚动条

const handleDragThumb = (e, index) =>{

const elWrap=ref__wrap.value

const elBarX=ref__barX.value

const elBarY=ref__barY.value

data.isTaped= truelet c={}//阻止默认事件

domUtils.isIE() ? (e.returnValue = false, e.cancelBubble = true) : (e.stopPropagation(), e.preventDefault())

document.onselectstart= () => false

if(index == 0) {

c.dragY= truec.clientY=e.clientY

}else{

c.dragX= truec.clientX=e.clientX

}//...

}//点击滚动槽

const handleClickTrack = (e, index) =>{//...

}//更新滚动区

const updated = () =>{if(props.native) returnconst elBox=ref__box.value

const elWrap=ref__wrap.value

const elBarX=ref__barX.value

const elBarY=ref__barY.value

let barSize=domUtils.getScrollBarSize()//垂直滚动条

if(elWrap.scrollHeight >elWrap.offsetHeight) {

data.barHeight= elBox.offsetHeight **2 /elWrap.scrollHeight

data.ratioY= (elWrap.scrollHeight - elBox.offsetHeight) / (elBox.offsetHeight -data.barHeight)

elBarY.style.transform= `translateY(${elWrap.scrollTop /data.ratioY}px)`//隐藏系统滚动条

if(barSize) {

elWrap.style.marginRight= -barSize + 'px'}

}else{

data.barHeight= 0elBarY.style.transform= ''elWrap.style.marginRight= ''}//水平滚动条

//...

}//滚动区元素/DOM尺寸改变

const handleResize = () =>{//执行更新操做

}//...

return{

...toRefs(data),

ref__box, ref__wrap, ref__barX, ref__barY,

handleMouseEnter, handleMouseLeave,

handleDragThumb, handleClickTrack,

updated,//...

}

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html任务3 模拟滚动条,vue3系列:vue3.0自定义虚拟滚动条V3Scroll 的相关文章

  • 解决OpenCV在Cmake时,因网络问题无法下载部分所需文件

    解决OpenCV在Cmake时 因网络问题无法下载部分所需文件 在安装CUDA Opecv进行Cmake的过程中 因为网络问题很多文件都无法下载 可以在你的opencv cache下可以看到 很多文件都是0kb的 这样肯定是不行的 我们要保
  • 6款字体转换工具网站,一键生成想要字体!

    第一字体 https www diyiziti com 图文图文吗 有图无文怎么行 平时没事儿咱也喜欢舞文弄墨一番 不过茶壶儿这书法比起名仕还是自叹不如哈 然而不得不说中国文字真的是博大精深 各种字体就像人生一样充满奇妙 第一字体网就为您提
  • postgresql 数据库版本升级 11.5升级14

    postgresql 数据库版本升级 11 5升级14 文章目录 postgresql 数据库版本升级 11 5升级14 前言 一 漏洞详情 二 版本升级 1 pg upgrade的用法 2 2 安装pg14 版本升级 后记 前言 最近因为
  • 算法_选择排序

    选择排序 选择排序的思想 对于一个给定的具有n个数的数组 从中依次找出最小 或最大 的元素 并且将它依次放到序列的起始位置 例如 4 2 7 8 10 1 5 第一次排序 1 2 7 8 10 4 5 第二次排序 1 2 7 8 10 4
  • Doris--基础--10--数据模型

    Doris 基础 10 数据模型 1 基本概念 在 Doris 中 数据以表 Table 的形式进行逻辑上的描述 一张表包括行 Row 和列 Column Row 用户的一行数据 Column 用于描述一行数据中不同的字段 1 1 Colu
  • 关于uniapp小程序端提示v-for 暂不支持循环数据问题的解决方案

    关于uniapp小程序端提示v for 暂不支持循环数据问题解决方案 需求描述 在uniapp小程序此项目中使用多层for循环时 小程序端提示 uniapp v for 暂不支持循环数据 以至于获取不到循环的数据 解决方案
  • JAVA的并发编程(八):Disruptor并发框架

    目录 一 Disruptor并发框架 1 介绍 2 关键知识点 3 实现方法 1 RingBuffer Disruptor 单线程 2 RingBuffer Squencebarrier BatchEventprocessor 多线程 单生
  • 杭电OJ 1002 A + B Problem II

    A B Problem II 页面数据来自 this page from http acm hdu edu cn showproblem php pid 1002 Time Limit 2000 1000 MS Java Others Me
  • linux EXPECT

    expect 概念 Expect除支持Unix Linux平台外 它还支持Windows平台 用过secureCRT的人应该知道有个自动登录的设置 那就是利用expect实现的 expect 安装需要那些包支持 tcl包和tk包 linux
  • Recovery系统升级(2)--- 软件架构

    软件架构 Recovery升级系统原理 Main System下载新版本升级包到设备存储 重启进入Recovery System Recovery从设备存储load升级包并升级Main System 最后重启回到Main System 与之
  • DLT(Diagnostic Log and Trace)嵌入式系统程序运行记录

    http blog csdn net yanlinembed article details 49837975 DLT的使用有属于Application范畴与Context范畴 在使用DLT时 需要包含以下头文件 include
  • 浅谈在线IDE的搭建,配置,体验

    首先想说一句 在线IDE体验不是很好 也可能是对于在线的IDE有了太多的期望 网页实现一些软件的功能确实比较困难 已经体验的IDE有 腾讯家的Coding Cloud Studio 亚马逊家的 Cloud9 代码沙盒 Codesandbox
  • 慧眼识才、认识自己

    慧眼识才的十二杆标尺 学历 经历 掌控特质 老虎性格 表现特质 孔雀性格 耐心特质 考拉性格 精确特质 猫头鹰性格 自信心 精力水平 现场爆发力 策略规划力 支持执行力 敏锐度 慧眼识才的十二杆标尺包括由表及里的五个圈层 最外层是学历和经历
  • maven [INFO] Generating project in Batch mode

    搜资料很简单是某些东西被Q了 那么解决方法也很简单 S S T A P全局模式就OK了
  • Flask框架的web开发02(web项目整体架构)

    目录 一 flask框架整体构造 1 介绍 2 构造图 二 核心对象 管理 启动模块 1 核心对象app py模块 2 管理模块manager py 3 启动模块server py 三 配置文件模块 四 forms验证模块 五 libs公共
  • 关于华三HCL使用时,设备端口状态为down的解决

    内存不能低于默认值 可以通过关闭一些模拟器中的设备 可以关闭物理机上一些正在使用的应用和后台程序 一台或少量的启动设备
  • 习题

    1 在路由器上配置SSH服务器的过程 2 简述以太网交换机Mac地址表的学习过程 首先当4台pc机连接到交换机相互通信时 交换机会取出每个数据包的源MAC地址 通过算法找到相应的位置 如果是新地址 则创建地址表项 填写相应的端口信息 生命周
  • 1132. 合法的三角数

    给定一个包含非负整数的数组 你的任务是计算从数组中选出的可以制作三角形的三元组数目 如果我们把它们作为三角形的边长 样例 输入 2 2 3 4 输出 3 解释 合法的组合如下 2 3 4 使用第一个 2 2 3 4 使用第二个 2 2 2
  • 【机试练习】【C++】随机选择算法

    随机选择算法的实现 include

随机推荐