vue 取色面板

需求简述:需要一个取色面板,由于element组件里面的事一个取色按钮,点击了才出现悬浮的取色面板,所以需要想想办法

效果图 如下:
在这里插入图片描述

起先思路:想用elementUi里面的取色按钮改造下 或是 js代码点击下按钮然后修样式,都尝试了下,最后还是不可行;

百度找了下也没找到类似的,类似的有都是JQ写的,最后上github 找到了一个资源用上了

资源地址: vue-color

安装依赖:

"vue-color": "^2.8.1",

安装注册插件:
拉了他的项目运行看了下,我需要用的是它的 chrome-picker 组件

import { Chrome } from 'vue-color' // 取色板资源
// Vue.component('photoshop-picker', Photoshop) // 取色板插件
// Vue.component('material-picker', material) // 取色板插件
// Vue.component('compact-picker', compact) // 取色板插件
// Vue.component('swatches-picker', swatches) // 取色板插件
// Vue.component('slider-picker', slider) // 取色板插件
// Vue.component('sketch-picker', sketch) // 取色板插件
Vue.component('chrome-picker', Chrome) // 取色板插件 上面几个也都可用

组件封装:

<!--
 * @Author: chengsl
 * @Date: 2021-11-29 15:57:14
 * @LastEditors: chengsl
 * @LastEditTime: 2021-12-06 14:56:46
 * @Description: 取色面板
-->
<template>
  <div class="vue-color-picker">
    <chrome-picker :value="localThemeColor" :disable-alpha="true" :disable-fields="true" @input="updateValue" />
  </div>
</template>

<script>
/**
 * 需求背景: 需要一个取色面板,常规的是点击按钮后 才会悬浮显示一个取色面板 并且点其他地方面板就会消失,因此需要改造
 * 实现方式: 选择插件 npm install vue-color
 * 以下是该插件可用的组件
    'material-picker': material,
    'compact-picker': compact,
    'swatches-picker': swatches,
    'slider-picker': slider,
    'sketch-picker': sketch,
    'chrome-picker': chrome, props: disableAlpha, disableFields
    'photoshop-picker': photoshop
 */
export default {
  name: 'VueColorPicker',
  components: {},
  props: {
    themeColor: {
      required: false,
      type: String,
      default: '#00ff00'
    }
  },
  data() {
    return {

    }
  },
  computed: {
    localThemeColor: {
      get() {
        return this.themeColor
      },
      set(val) {
        this.$emit('change-color', val)
      }
    }
  },
  watch: {},
  created() {

  },
  mounted() {

  },
  methods: {
    updateValue(val) {
      // console.log('updateValue,', val)
      this.$emit('change-color', val.hex)
    }
  }
}
</script>
<style lang='scss' scoped>
.vue-color-picker {
  height: 220px;
  max-width: 380px;
  margin: 0 auto;
  >>> .vc-chrome {
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    box-shadow: none;
    padding: 0 12px;
    .vc-chrome-saturation-wrap {
      height: 180px;
      padding: 0;
    }
    .vc-chrome-body {
    box-sizing: border-box;
    padding: 12px 16px 12px;
    height: 40px;
    }
  }
}
</style>

组件调用:

<color-picker :theme-color.sync="data.themeColor.scConfigValue" @change-color="changeColorByPicker" />

补充:

// 10进制 => 16进制
parseInt(156, 10).toString(16) // '9c'

// 16进制 => 10进制
parseInt('ef', 16) // 239

结语: 感谢UI出骚图让我又成长了一丢丢

取色板源码 功能介绍: 取色,取到的颜色可以通过ColorChanged事件参数e.Color获得,还可以在控件里把current变量公开出来 实现过程: 控件由很多色块组成。目前固定尺寸6x36,你可以自己修改尺寸。 控件分层是这样的(从最底层到最上层): 1.控件绘图面2.色块3.网格4.边框5.光标 在Paint事件中按上面顺序绘制2-5。 绘制网格很简单,根据色块大小隔一定距离画一道横(竖)线 绘制色块道理差不多,先获取当前坐标(行,列)的颜色(根据你自己定义的调色盘计算出来),然后填充一个方块,转到处理下一个坐标,直到全部行列都处理完。 然后绘制所有色块 从表面上看,是通过鼠标移动,选取每个色块获得颜色。其实不然。那样做,我就需要保存每个色块的颜色信息,白白浪费空间。我的实现方法是通过鼠标位置得知当前鼠标所在色块的坐标(行,列),然后用上面的颜色算法直接得到该色块的颜色,一句话搞定(Point pt是鼠标位置)。 标移动时会绘制光标,为了减少性能开销,不能直接Refresh()/Invalidate()控件,使用Invalidate(Rectangle)来重绘被鼠标弄脏的那个区域。所以用了两个小矩形保存旧光标和新光标的区域,然后在鼠标事件中更新(和鼠标取色一起)。 然后鼠标移动事件里重绘时稍微把区域扩大点(避免留下难看的边框)。 最后一行「OnColorChanged();是用来引发颜色改变事件。把事件写出来基本就完成了。 然后再完善下属性之类的,就可以在你的程序里使用了。 程序简单适合新手学习使用。 注意: 开发环境为Visual Studio 2010
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#老程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值