你可能会用的上的一个vue功能组件库,持续完善中...

日常开发使用组件库一般都能满足大部分的需求,不过有些功能组件可能库里并没有,这里开源一些特定项目可能会使用到的组件,希望可以帮助到大家~

快速上手

  • 安装
npm i vue-gn-components
  • 引入
整体引入:
import VueGnComponents from "vue-gn-components";
import "vue-gn-components/lib/style/index.css";
Vue.use(VueGnComponents)

按需引入:
import { CheckIn, watermark } from "vue-gn-components";
import "vue-gn-components/lib/style/index.css";
Vue.use(CheckIn).use(watermark)

→源码所在地←

组件介绍

一、放大镜 (Magnifier)

image
  • 组件安装:
import { Magnifier } from 'vue-gn-components';
Vue.use(Magnifier)
  • 组件亮点:

无论组件的dom位置在页面何方,会准确计算鼠标位置以及自动在右侧悬浮一个查看区域,并且当右侧位置超过边界后,查看区域会自动出现在左边。

  • 组件调用:
<magnifier
  :boxSize="400"
  :minImgUrl="require('./img/min.jpg')"
  :maxImgUrl="require('./img/max.jpg')"
></magnifier>
  • 参数:

boxSize: 设置放大镜主体框的大小,会自动在右侧生成一个与之同样大小的查看放大图像的悬浮框,默认500。

minImgUrl: 放大镜小图的url

maxImgUrl: 放大镜大图的url

autoReverse: 是否开启右侧距离超过边界时,悬浮框自适应在左侧。默认true

direction: 悬浮框的方向,默认right右侧。可选left

二、签到 (CheckIn)

image
  • 组件安装:
import { CheckIn } from 'vue-gn-components';
Vue.use(CheckIn)
  • 组件亮点:

实现了功能。会将传入的一维数组的日期集合,按年月格式化为对象,在渲染某个月时,只会渲染对应当月的签到天数,数组拥有海量数据也不会大量渲染。

组件调用:

<template>
  <check-in :checkIns="checkIns" />
</template>

export default {
  return {
    checkIns: ['2019-12-15', '2019.12.18', 1576250061182]
  }
}
  • 参数:

checkIns: 传入一个签到日期的一维数组集合,可以是时间戳、2019-11-112019.11.11格式。

size: 签到组件的整体大小,默认500,大小自适应。

三、图片标签 (ImgLabel)

image
  • 组件安装:
import { ImgLabel } from 'vue-gn-components';
Vue.use(ImgLabel)
  • 组件亮点:

实现了功能。右击创建标签,双击编辑标签,可以单个移除,也可以全部清除,保存到本地缓存,导出为图片。

  • 组件调用:
<img-label :src="require('./img/timg.jpg')"></img-label>
  • 参数:

isShowSaveBtn: 是否显示保存按钮,默认true,会将标签数据保存到本地缓存。

src: 需要添加标签图片的url

width:图片的宽,默认500。

theme: 主题色,默认#3b8bcc

四、滑动验证(SlideCheck)

image
  • 组件安装:
import { SlideCheck } from 'vue-gn-components';
Vue.use(SlideCheck)
  • 组件亮点:

仿某电商的注册验证,不过使用纯canvas进行绘制,包括抠出来的拼图以及图片的渲染。而且在验证成功派发的事件里会记录用户滑动过程中上下分别抖动的最大距离。(可能机器是不会抖的,增加了一点点的安全性)

  • 组件调用:
<slide-check 
  :width="300" 
  :height="300" 
  :src="src" 
  @success="success" 
  @fail="fail">
</slide-check>

export default {
  data() {
    src: [
      require("./img/timg.jpg"),
      require("./img/min.jpg")
    ]
  }
}
  • 参数:

radius: 拼图突出圆心的半径值,也就是绘制的拼图的大小,默认10

src: 单个url或多个url数组的集合,当为多个时,验证失败或成功都会随机选择另外一张图片。

width: 验证区域的宽,是canvas容器的width

height: 验证区域的高。

theme: 主题色,默认#369

  • 事件:

success: 验证成功的回调,会派发一个对象出来,分别为上下波动的最大值。

fail: 验证没通过的回调。

五、倒计时(Countdown)

image
  • 组件安装:
import { Countdown } from 'vue-gn-components';
Vue.use(Countdown)
  • 组件亮点:

两种模式,一种是传入时间戳或2022-5-12-17-202022.5.12.17.20这样大于当前时间的格式。另一种是传入60这样的秒数,开始倒数之后刷新页面不会重新计时。没有做任何css的美化,只使用作用域插槽派发出对应的值。

  • 组件使用:
<template>
<div>
  <countdown :time="date">
    <template v-slot="{date}">
      {{date.year}}年-{{date.month}}月-{{date.date}}日-{{date.hours}}小时-{{date.minutes}}分钟-{{date.seconds}}秒
    </template>
  </countdown>
  <countdown isSMSMode :totalTime="timeLeft">
    <template v-slot="{date}">{{date.timeLeft}}秒</template>
  </countdown>
</div>
</template>

export default {
  data() {
    return {
      date: "2022.11.11",
      timeLeft: 60
    };
  }
  • 参数:

time: 传入大于当前时间的时间格式。

isSMSMode: 是否秒数倒数模式,默认false

totalTime: 倒数模式的最大秒数。

  • 作用域插槽

year: 年;

month: 月;

date: 日;

hours: 小时;

minutes: 分钟;

seconds: 秒钟;

timeLeft: 倒数剩余秒数.

  • 事件:

end:倒计时结束。

  • 方法:

start:开始。

pause:暂停。

六、水印(watermark)

image
  • 组件安装:
import { watermark } from 'vue-gn-components';
Vue.use(watermark)
  • 指令亮点:

采用自定义指令形式,会将指令作用在img上的标签最终替换为canvas标签。使用离屏canvas进行绘制,一个绘制图像,另一个绘制水印,最终合并为一个canvas标签。

  • 指令调用:
<template>
  <div>
    <img v-watermark="{src: src, text: 'hello world'}"/>
  </div>
</template>

export default {
  data() {
    return {
      src: require("./img/min.jpg")
    };
  }
}
  • 指令参数:

src: 图片的url

text: 水印的文字。

opacity: 水印的透明度,默认0.3

rotate: 旋转角度,默认20

fontSize: 水印字体大小,默认20

type: 水印绘制的方式,默认是repeat全屏重复绘制。只绘制一条水印时,可选left-top左上,right-top右上,right-bottom右小,left-bottom左下。

七、拖拽组件(DragWrap/DragItem)

image
  • 组件安装:
import { DragWrap, DragItem } from 'vue-gn-components';
Vue.use(DragWrap).use(DragItem)
  • 组件亮点:

拖拽的具体内容用户完全可以自己编写,也可以自己编写拖拽的控制点。

  • 组件调用:
<template>
  <drag-wrap class="wrap" :data="list" @watchData="watchData">
    <drag-item class="item" v-for="(item, index) in list" :key="index">
      <template #drag>
        <div>拖拽Dom</div>
      </template>
      <div>{{item}}</div>
    </drag-item>
  </drag-wrap>
</template>

export default {
  data() {
    return {
      list: [111, 222, 333, 444, 555, 666, 777, 888, 999]
    };
  },
  methods: {
    watchData(newList) {
      console.log("newList", newList);
    }
  }
}
  • 参数:

data:数组格式,Dom有对应的渲染数组,当Dom位置变了之后,数组也会发生变化,传递给组件内,改变后组件派发出来。

  • 事件:

watchData:会将改变的数组派发出来,监听这个方法接收。

  • 插槽:

drag:用户自己定义拖拽的控制点,没有时拖拽Dom项任意任意位置都可以。

八、找茬组件(FindDiff)

image
  • 组件安装:
import { FindDiff } from 'vue-gn-components';
Vue.use(FindDiff)
  • 组件亮点:

'辅助'完成大家来找茬游戏。

  • 组件调用:
<template>
  <find-diff/>
</template>

更多

更多的组件后续会持续添加以及优化,欢迎pr各种你使用到功能组件。源码地址 vue-gn-components,如果对你有帮助,还请给个Star了,这也是我持续完善这个项目,持续的动力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容

  • 其实接到这个思维角度的时候,我的内心是崩溃的:你妹啊,我的人生格言是“践行、践行再践行”,你给我让我给拖延症说好话...
    鸣沙石丨写作群招人阅读 1,357评论 4 3
  • 浪起微澜之卷 【第一章】空山新雨 雨过初晴的山道上泥泞不堪,细小的水洼随处可见,一片落叶浮在水上,好似壶中...
    踏歌涉川阅读 555评论 0 1
  • 苏东坡曾谓读贾岛诗如食小鱼,“所得不偿劳”,我小时吃石榴,觉得吃得一嘴籽儿,而吮不出多少味道,真是“所得不偿劳”,...
    一个人的清歡阅读 211评论 0 1
  • 十点半了,会议室的灯依旧亮着,八点半的会议硬生生的开到了现在,领导依旧滔滔不绝,似有泄洪之势,其间涉及到的内容已经...
    往生净土阅读 66评论 0 1
  • 再不改变自己真的会疯。是自己太在乎孩子了,才会如惊弓之鸟,害怕这样,害怕那样。其根源是对自己的出自信。放松自己心情...
    小笨猪520阅读 142评论 0 0