您可以戳这里查看演示效果

v-progress.js

import "./v-progress.css";const scrollInit = (dom, opts, progress, progressContent) => {let width = "height";let scrollTop = dom.scrollTop;let scroll = dom.scrollTop;let top = "top";progressContent.style.height = "100%";progressContent.style.width = ((dom.scrollTop / (dom.scrollHeight - dom.clientHeight) * 100) || 0) + "%";switch (opts.type) {case "top":break;case "bottom":scrollTop = -dom.scrollTop;top = "";break;case "left":width = "width";scrollTop = 0;scroll = dom.scrollTop;progressContent.style.width = "100%";progressContent.style.height = ((dom.scrollTop / (dom.scrollHeight - dom.clientHeight) * 100) || 0) + "%";break;case "right":width = "width";scrollTop = 0;scroll = dom.scrollTop;progressContent.style.width = "100%";progressContent.style.height = ((dom.scrollTop / (dom.scrollHeight - dom.clientHeight) * 100) || 0) + "%";break;default:width = "height";}let height = width == "height" ? "width" : "height";progressContent.style.background = opts.color;progress.style.cssText = `background: ${opts.background}; ${width}: ${opts.width}; ${height}: 100%; ${opts.type}: ${scrollTop}px; ${top}: ${scroll}px;`;
}
export default {bind(el, binding) {const opts = Object.assign({color: "#409EFF",  //颜色background: "transparent",  // 底部颜色width: "3px",  // 宽度type: "top", // "top 上  bottom 下  left 左  right 右"},binding.value);if (el) {setTimeout(() => {if (!window.getComputedStyle(el, null).position ||window.getComputedStyle(el, null).position == "static" ||window.getComputedStyle(el, null).position == "initial") {el.style.position = "relative";}el.style.overflowY = "scroll";el.style.overflowX = "hidden";let progress = document.createElement("div");let progressContent = document.createElement("p");progress.className = "scroll-progress";progress.appendChild(progressContent);el.appendChild(progress);scrollInit(el, opts, progress, progressContent);el.onscroll = () => {scrollInit(el, opts, progress, progressContent);}});}}
};复制代码
复制代码

index.js

import progress from './v-progress.js'
// 添加install方法
const Progress = {install: function (Vue) {Vue.directive("progress", progress)}
}// Progress
export default Progress复制代码


v-progress.css

.scroll-progress {position: absolute;z-index: 99999;
}复制代码

使用案例:

app.vue

<template><div id="app" v-progress><div v-progress="{backgroundColor: 'red'}" class="box-a"><p v-for="(x,i) in 30" :key="i">我是{{i}}</p></div><div v-progress="{type: 'bottom', color: 'radial-gradient(#14b9ff, #67C23A)'}" class="box-b"><p v-for="(x,i) in 30" :key="i">我是{{i}}</p></div><div v-progress="{type: 'right', color: 'linear-gradient(to bottom ,#F56C6C, #E6A23C)'}" class="box-c"><p v-for="(x,i) in 30" :key="i">我是{{i}}</p></div><div  v-progress="{type: 'left', color: 'radial-gradient(#14b9ff, #67C23A)', background: 'linear-gradient(to bottom ,#F56C6C, #E6A23C)'}" class="box-d"><p v-for="(x,i) in 30" :key="i">我是{{i}}</p></div></div>
</template>复制代码

手机模式下略有问题,手机计算能力下进度条略有抖动。建议再PC 模式下使用。

转载于:https://juejin.im/post/5c8b56f25188257f882f16b4

vue 自定义指令实现,滚动条百分比进度条。相关推荐

  1. YCProgress自定义百分比进度条

    目录介绍 1.本库优势亮点 2.使用介绍 2.1 圆环百分比进度条 2.2 直线百分比进度条 2.3 仿杀毒类型百分比进度条 3.注意要点 4.效果展示 5.其他介绍 1.本库优势亮点 圆环百分比进度 ...

  2. Vue实战--动态圆环百分比进度条

      最近在开发小程序的时候,碰到一个实现圆环百分比进度条的需求,类似如下设计图: 小白的我感觉实现起来有难度,于是上百度看看别人是怎么做的,结果没找到一个满意的,要不是静态的实现,就是需要用到比较多的 ...

  3. android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...

    写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...

  4. Vue自定义指令实现弹窗拖拽,四边拉伸及对角线拉伸

    Vue自定义指令实现弹窗拖拽,四边拉伸及对角线拉伸 引言 页面布局 drag.js文件 弹窗拖拽实现及边界限制 鼠标指针悬停样式 四边拉伸及对角线拉伸 拉伸干涉 引言 近期公司vue前端项目需求:实现 ...

  5. clientsideevents能定义几个click事件_分享8个非常实用的Vue自定义指令

    作者:lzg9527 https://juejin.cn/post/6906028995133833230 在 Vue,除了核心功能默认内置的指令 ( v-model 和 v-show ),Vue 也 ...

  6. php 进度条百分比算法,实例讲解Ajax实现简单带百分比进度条

    最近做项目遇到这样的需求要求当进行文件长传保存等操作时,能在页面显示一个带百分比的进度条,给用户一个好的交互体验,下面通过实例代码给大家介绍基于ajax实现带百分比进度条效果,需要的的朋友参考下吧,希 ...

  7. ajax百分比加载特效,jQuery实现的简单百分比进度条效果示例

    本文实例讲述了jQuery实现的简单百分比进度条.分享给大家供大家参考,具体如下: 一.JS Code: var progressId = "ProgressBarID"; fun ...

  8. vue自定义指令封装节流_Vue自定义指令封装节流函数的方法示例

    节流函数是web前端开发中经常用到的一个开发技巧,在input实时搜索,滚动事件等,为了避免过多消耗性能,我们都会使用节流函数.在<JavaScript高级程序设计>一书中有这样的一个例子 ...

  9. vuejs 指令封装 button 加载效果_这些Vue自定义指令,让你的项目开发爽到爆

    受 AngularJS 的启发,Vue 内置了一些非常有用的指令(比如v-html 和 v-once等),每个指令都有自身的用途.完整的指令列表可以在这里查看. 这还没完,更棒的是可以开发自定义指令. ...

最新文章

  1. BFD与IGP快速收敛应用测试
  2. 获取汉字的首字母(转)
  3. python中一共有多少个关键字-Python中关键字有多少个?
  4. fiddler和xampp安装成功后,网站打不开的原因
  5. how does UI Framework get url of detail page - _router
  6. Fedora 13 的新特性
  7. java oracle 排序_Oracle的排序和限制条件(order by 和where)
  8. Java SSM1——Maven
  9. 原动力CMS PHP域名授权系统V3.0
  10. (35)Verilog HDL算术运算:取模、指数、对数
  11. 拓端tecdat|R语言相关分析和稳健线性回归分析
  12. 分布式文件系统(FastDFS+Tengine+fastdfs-nginx-module)
  13. iconfont采坑
  14. Axure9桌面无法显示图标
  15. 后端返回文件流PDF文件前端如何实现下载/在线打开
  16. python12306抢票_python编写抢票软件-12306抢票软件run下载python版-西西软件下载
  17. 线程池为啥要用阻塞队列
  18. Unity3D “xx AnimationEvent has no function name specified!”解决方案
  19. 硬件系列(五)-------------Android小票打印机连接 (已封装好,可直接使用)
  20. 说一个岛上有100个人,其中有5个红眼睛

热门文章

  1. 组策略的优先级是 本地》站点》域》组织单位
  2. 你有没有成为技术作家的潜力
  3. Python中排序函数sorted和排序方法sort的异同点对比分析
  4. CF1012F Passports
  5. linux 远程 telnet
  6. 团队-石头剪刀布-模块测试过程
  7. CM记录-选择合适的硬件
  8. Hello!The familiar and strange world.
  9. 4.3 if-else语句使用
  10. PHP的Session机制