安装与调用
引用下面CSS:
<link rel="stylesheet" href="https://unpkg.com/lu2/theme/edge/css/common/ui/Color.css">
JS为:
<script type="module" src="https://unpkg.com/lu2/theme/edge/js/common/ui/Color.js"></script>
本组件为Web Components,引用时需添加type="module"
,也可采用如下方式进行引用:
<script type="module"> import "https://unpkg.com/lu2/theme/edge/js/common/ui/Color.js"; </script>
本组件为内置自定义元素组件,如果需要兼容Safari浏览器,还需要引入下面的JS。
<script src="https://unpkg.com/lu2/theme/edge/js/common/safari-polyfill.js"></script>
如果是npm安装调用,则:
import 'lu2/theme/edge/css/common/ui/Color.css'; import 'lu2/theme/edge/js/common/safari-polyfill.js'; import 'lu2/theme/edge/js/common/ui/Color.js';
如果 JS import语法报错,试试在业务代码中动态引入。
import('lu2/theme/edge/js/common/safari-polyfill.js'); import('lu2/theme/edge/js/common/ui/Color.js');
使用示意
Edge主题采用和Pure主题不同的策略。
本主题下<input type="color">
还是原始的颜色选择框(Pure主题下该代码直接组件初始化了),如下:
添加is="ui-color"
才会变成自定义颜色组件,如下:
<input type="color" is="ui-color">
实际效果如下:
颜色为:
支持#RRGGBBAA色值
添加is="ui-color"
以及type="color-opacity"
会变成支持透明度的自定义颜色组件,如下:
<input type="color" is="ui-color" type="color-opacity" value="#23456766">
支持透明度的颜色为:
指定初始颜色
颜色指定和原生的颜色选择框一致,通过value
属性设置,使用#RRGGBB
格式,如果没有value
属性,则颜色值为#000000
,表示纯黑色。
下面这个例子演示了如何设置初始颜色为红色,代码如下:
<input type="color" is="ui-color" value="#ff0000">
效果为:
动态颜色赋值
想要动态修改显示的颜色,直接设置元素的value
属性值即可。例如:
HTML和JS代码如下:
<input type="color" id="input" is="ui-color"> <button id="button">变成红色</button>
// 点击按钮 button.addEventListener('click', function () { // 设置为红色 input.value = '#ff0000'; });
本组件还支持颜色关键字赋值,这是原生颜色选择框没有的功能,例如:
HTML和JS代码如下:
<input type="color" id="input2" is="ui-color"> <button id="button2">变成mediumseagreen</button>
// 点击按钮 button2.addEventListener('click', function () { // 设置为中海绿色 input2.value = 'mediumseagreen'; });
颜色变化事件
和原生颜色选择框一样,直接绑定原生的'change'
事件就可以了。
例如:
input.addEventListener('change', function () { dom.style.color = this.value; });
面板显示与隐藏事件
使用自定义的'show'
和'hide'
事件。如下:
input.addEventListener('show', function () { console.log(`id为${ this.id }的颜色选择面板出现了`); }); input.addEventListener('hide', function () { console.log(`id为${ this.id }的颜色选择面板隐藏了`); });
禁用
和原生的输入框一样,设置disabled
属性即可禁用,例如:
<input type="color" disabled is="ui-color">
注意title提示的变化
内置属性和方法
设置is="ui-color"
后,颜色选择框元素就会自带Color组件的属性和方法。例如,已知:
<input type="color" id="$0" is="ui-color">
则$0这个DOM对象上包含了以下属性和方法:
{ element: { // 面板容器 target: null, /* 面板显示之后暴露的元素 */ // 面板中的输入框 field: null,}, display: true/false, // 浮层定位 position: function() {}, // 显示并定位 show: function() {}, // 隐藏 hide: function() {}, // 其他不常用,略... ... }// 其他...(点击展开)
current: null, // 基本颜色面板容器 basic: null, // 点击“更多”切换后的面板容器 more: null, // 面板中色域取色操作元素们 circle: null, fill: null, arrow: null
例如执行下面的代码就可以让颜色选择面板显示:
$0.show();
延伸和拓展
固定位置显示
Color组件并没内置任何固定位置显示的API,需要开发者自己基于现有的能力进行处理。
例如如下所示的效果,选择任意的颜色,均可以看到边框颜色发生了变化:
相关的代码如下所示:
<input type="color" id="$1" is="ui-color" hidden>
// 固定位置显示 // 设置标志量为显示 $1.display = true; // 没有隐藏与重定位 $1.hide = $1.position = function () {}; $1.create().match(); // 容器显示 var container = $1.element.target; $1.insertAdjacentElement('afterend', container); container.style.position = 'relative'; container.style.display = 'inline-block'; // 当面板中输入框变化时候,执行回调 $1.element.field.addEventListener('change', function () { $1.parentElement.style.color = '#' + this.value; });
浮层的控制
Color组件以及LuLu UI中的DateTime组件、Datalist组件等支持设置dataset
值改变浮层的方向和位置。
支持的参数包括:
参数名称 | 支持类型 | 默认值 | 释义 |
---|---|---|---|
offset-x | Number | 0 | 可选。表示浮动元素的水平偏移大小,相对于右侧偏移,数值越大偏移越大。 |
offset-y | Number | 0 | 可选。表示浮动元素的垂直偏移大小,相对于上方偏移,数值越大偏移越大。 |
position | String | '4-1' | 可选。表示触发元素和浮层元素的定位关系。遵循'trigger-target' 规则,数字表示对应元素的位置,具体如下图。例如'7-5' 就表示触发元素的位置7 和浮层元素的5 对齐。
|
edge-adjust | Boolean | true | 可选。表示浮层显示在屏幕之外的时候,是否自动调整方向。默认是自动调整。 |
safe-area | String | '0px' | 可选。浮层距离浏览器窗口的安全距离。支持1-4个值,表示的方位和CSS margin 属性一致。例如:'10px 20px 30px'表示上安全距离10px ,左右是20px ,下是30px 。
此参数还支持从面板元素的CSS自定义属性 |
其中offset-x
和offset-y
可以合并为offsets
参数,语法是offsets="x, y"
。
这些参数直接设置在<input>
元素上,例如下面这个在右侧显示的颜色选择器:
<input type="color" is="ui-color" data-position="6-8">
实时效果如下(点击并观察颜色选择器的位置):
Color组件默认position
参数值是'7-5'
。
本页贡献者:
zhangxinxu, Gwokhov