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));
+ }
}
}