diff --git a/examples/docs/en-US/color-picker.md b/examples/docs/en-US/color-picker.md index cfa4ceb06..693726c8e 100644 --- a/examples/docs/en-US/color-picker.md +++ b/examples/docs/en-US/color-picker.md @@ -2,63 +2,42 @@ export default { data() { return { - color1: '#ff0', + color1: '#20a0ff', color2: null, - color3: 'rgba(128, 33, 22, 0.8)', - color4: null + color3: 'rgba(19, 206, 102, 0.8)' }; - } + }, + mounted() { + this.$nextTick(() => { + const demos = document.querySelectorAll('.source'); + demos[0].style.padding = '0'; + }); + }, } - - ## ColorPicker -ColorPicker is a color picker component that is used to solve the need to select a color in certain scenes. +ColorPicker is a color selector supporting multiple color formats. -### Color +### Basic usage -:::demo ColorPicker usage is similar to DatePicker and requires v-model to bind a variable in a Vue instance. The bind variable's data type needs to be a string. +:::demo ColorPicker requires a string typed variable to be bound to v-model. ```html
- Default value + With default value
- Empty + With no default value
- - - -## ColorPicker +## ColorPicker 颜色选择器 -ColorPicker 是一个颜色选择器,该组件是用来解决某些场景下需要选择颜色的需求。 +用于颜色选择,支持多种格式。 -### 选择颜色 +### 基础用法 -:::demo ColorPicker 用法与 DatePicker 类似,需要使用 v-model 来与 Vue 实例中的一个变量进行双向绑定,绑定的变量需要是字符串类型。 +:::demo 使用 v-model 与 Vue 实例中的一个变量进行双向绑定,绑定的变量需要是字符串类型。 ```html
有默认值 @@ -51,14 +53,11 @@ ColorPicker 是一个颜色选择器,该组件是用来解决某些场景下
- - diff --git a/packages/color-picker/src/components/sv-panel.vue b/packages/color-picker/src/components/sv-panel.vue index 815180903..6a1fee353 100644 --- a/packages/color-picker/src/components/sv-panel.vue +++ b/packages/color-picker/src/components/sv-panel.vue @@ -18,7 +18,7 @@ - diff --git a/packages/color-picker/src/draggable.js b/packages/color-picker/src/draggable.js index 14e8bfcac..339a4852c 100644 --- a/packages/color-picker/src/draggable.js +++ b/packages/color-picker/src/draggable.js @@ -1,6 +1,8 @@ +import Vue from 'vue'; let isDragging = false; export default function(element, options) { + if (Vue.prototype.$isServer) return; const moveFn = function(event) { if (options.drag) { options.drag(event); diff --git a/packages/color-picker/src/main.vue b/packages/color-picker/src/main.vue index fa727fdbd..e00d9aff5 100644 --- a/packages/color-picker/src/main.vue +++ b/packages/color-picker/src/main.vue @@ -4,9 +4,9 @@ - + @@ -47,11 +47,30 @@ directives: { Clickoutside }, + computed: { + displayedColor() { + if (!this.value && !this.showPanelColor) { + return 'transparent'; + } else { + const { r, g, b } = this.color.toRgb(); + return this.showAlpha + ? `rgba(${ r }, ${ g }, ${ b }, ${ this.color.get('alpha') / 100 })` + : `rgb(${ r }, ${ g }, ${ b })`; + } + } + }, + watch: { value(val) { if (val && val !== this.color.value) { this.color.fromString(val); } + }, + color: { + deep: true, + handler() { + this.showPanelColor = true; + } } }, @@ -62,10 +81,22 @@ }, clearValue() { this.$emit('input', null); + this.showPanelColor = false; this.showPicker = false; + this.resetColor(); }, hide() { this.showPicker = false; + this.resetColor(); + }, + resetColor() { + this.$nextTick(_ => { + if (this.value) { + this.color.fromString(this.value); + } else { + this.showPanelColor = false; + } + }); } }, @@ -84,7 +115,8 @@ }); return { color, - showPicker: false + showPicker: false, + showPanelColor: false }; }, diff --git a/packages/theme-default/src/color-picker.css b/packages/theme-default/src/color-picker.css index 161ead451..1a8cbe9fc 100644 --- a/packages/theme-default/src/color-picker.css +++ b/packages/theme-default/src/color-picker.css @@ -4,7 +4,7 @@ @component hue-slider { position: relative; box-sizing: border-box; - width: 240px; + width: 280px; height: 12px; background-color: #f00; padding: 0 2px; @@ -58,7 +58,7 @@ @component svpanel { position: relative; - width: 240px; + width: 280px; height: 180px; @descendent white, black { @@ -94,7 +94,7 @@ @component alpha-slider { position: relative; box-sizing: border-box; - width: 240px; + width: 280px; height: 12px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); @@ -141,7 +141,7 @@ } @component dropdown { - width: 260px; + width: 300px; @descendent main-wrapper { margin-bottom: 6px; @@ -158,6 +158,13 @@ text-align: right; } + @descendent value { + float: left; + line-height: 26px; + font-size: 12px; + color: var(--color-base-black); + } + @descendent btn { border: 1px solid #dcdcdc; color: #333; @@ -173,6 +180,10 @@ color: #cccccc; cursor: not-allowed; } + &:hover { + color: var(--color-primary); + border-color: var(--color-primary); + } } @descendent link-btn { @@ -181,6 +192,9 @@ text-decoration: none; padding: 15px; font-size: 12px; + &:hover { + color: tint(var(--color-primary), var(--button-hover-tint-percent)); + } } }