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

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. 【译】Web Components简介
  2. 30个创意出色的非常实用的jquery框架插件-(视觉大背景,瀑布流效果)
  3. wxWidgets:wxSpinCtrlDouble类用法
  4. 阿里云物流+Flask整合
  5. Lua初学习 9-12 基础
  6. 回归分析加不加常数项_时间序列分析基础(一)
  7. opencv画线和文字
  8. android列表项点击事件,Android 开发 tips(2):监听 Listview 列表项点击事件
  9. 超级计算机的容量单位,微型计算机内存容量的基本单位(计算机内存容量什么单位)...
  10. 实验3-1 求一元二次方程的根 (20 分)
  11. iOS上线后程序崩溃日志处理-- Crashlytics
  12. android fps 性能分析,Android性能测试关注的指标整理
  13. [bzoj3887][Usaco2015 Jan]Grass Cownoisseur_trajan_拓扑排序_拓扑序dp
  14. BZOJ2109: [Noi2010]Plane 航空管制 解题报告
  15. pomodoro命令行计时器
  16. TaiShan服务器介绍
  17. 淘宝总裁蒋凡:今年双11淘宝推荐流量超过了搜索流量
  18. 教你快速制作一个简单的网页
  19. 一道简简单单的字节跳动算法面试题
  20. Linux中压缩解压工具使用

热门文章

  1. Python 频繁读取Mysql相关问题
  2. Servlet 第六课: Session的使用
  3. Recover Binary Search Tree
  4. 卷进大厂系列之LeetCode刷题笔记:移除元素(简单)
  5. pandas打乱行次序
  6. excel Match函数不同匹配类型用法解析
  7. UVA - 11478 Halum 二分+差分约束
  8. 1036: [ZJOI2008]树的统计Count
  9. ASP.NET(一):Reques对象和Response对象的区别,以及IsPostBack属性的用法
  10. Ftp上传类(FtpClient)