uni-app 有没有圆形的颜色选择器插件

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app 有没有圆形的颜色选择器插件

有没有圆形的颜色选择器插件

3 回复

有 Q 1196097915


可以做,联系QQ:1804945430

uni-app 中,虽然官方并没有直接提供一个圆形的颜色选择器插件,但你可以通过自定义组件来实现一个圆形的颜色选择器。下面是一个简单的示例代码,展示如何使用 Canvas 实现一个基本的圆形颜色选择器。

首先,创建一个自定义组件 ColorPicker.vue

<template>
  <view class="container">
    <canvas canvas-id="colorCanvas" class="colorCanvas"></canvas>
    <view class="slider-container">
      <slider @change="onSliderChange" value="{{sliderValue}}" min="0" max="360"></slider>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      sliderValue: 0,
    };
  },
  mounted() {
    this.drawColorWheel();
  },
  methods: {
    drawColorWheel() {
      const ctx = uni.createCanvasContext('colorCanvas');
      const width = 300;
      const height = 300;
      const centerX = width / 2;
      const centerY = height / 2;
      const radius = width / 2 - 10;

      for (let angle = 0; angle < 360; angle += 1) {
        const radians = angle * Math.PI / 180;
        const x = centerX + radius * Math.cos(radians) - width / 2;
        const y = centerY + radius * Math.sin(radians) - height / 2;
        ctx.fillStyle = this.hsvToRgb(angle / 360, 1, 1);
        ctx.fillRect(x, y, 1, 1);
      }
      ctx.draw();
    },
    hsvToRgb(h, s, v) {
      // HSV to RGB conversion function
      // ... (省略具体实现,可参考常见HSV到RGB转换算法)
      return `rgb(${r},${g},${b})`;
    },
    onSliderChange(e) {
      this.sliderValue = e.detail.value;
      // 重新绘制特定角度的颜色(这里为了简单,直接重绘整个圆)
      this.drawColorWheel();
      // 可以在这里添加逻辑来显示或返回选中的颜色
    },
  },
};
</script>

<style>
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
}
.colorCanvas {
  width: 300px;
  height: 300px;
  border: 1px solid #ccc;
}
.slider-container {
  margin-top: 20px;
}
</style>

注意:

  1. hsvToRgb 方法需要完整实现 HSV 到 RGB 的转换算法,这里为了简洁省略了具体实现。
  2. 这个示例仅实现了颜色选择器的圆形部分,并通过滑块来选择色调(Hue)。你可以进一步扩展这个组件,比如添加饱和度(Saturation)和亮度(Value)控制,以实现更完整的颜色选择器功能。
  3. 由于 uni-app 支持多平台,这个组件在不同平台上的表现可能需要做适当调整。
回到顶部