小而美的颜色选择器:xy-color-picker

简介: 小而美的颜色选择器:xy-color-picker

html5表单元素input新增了一个color类型,也就是颜色选择器。

<input type="color">


该选择器在windows上的默认效果如下:

image.png

可以说非常难看并且难用了。


为了解决这个问题,xy-ui新增了一类组件xy-color-picker,效果如下:


image.png

设计参考chorme颜色选择器。


是不是从视觉上就提升了一大截呢


下面来看看具体使用。


建议查看文档,可以实时交互


功能特性

image.png

  • 基于色相(HSV)模式选择
  • 支持鼠标滑动和键盘输入选择颜色
  • 可以选择切换颜色显示模式,分别为hexrgbahsl
  • 点击左边圆形按钮可以复制当前颜色值到剪贴板
  • 可以从下方选择预设颜色值(Matetial Design Color)


使用方式


使用方式很简单


  • npm
npm i xy-ui


  • cdn
<script type="module" src="https://unpkg.com/xy-ui/components/xy-color-picker.js"></script>
<!--或者-->
<script type="module">
    import 'https://unpkg.com/xy-ui/components/xy-color-picker.js'
</script>


  • 或者直接从github拷贝源码。
<script type="module" src='./node_modules/xy-ui/components/xy-color-picker.js'></script>
<!--或者-->
<script type="module">
    import './node_modules/xy-ui/components/xy-color-picker.js';
</script>
使用
<xy-color-picker></xy-color-picker>


默认值defaultvalue


可以给颜色选择器指定一个初始颜色值defaultvalue,取值为合法的颜色值。


类型 示例 web支持
关键字 redblue 支持
hex(a) #42b983#42B983BA 支持
rgb(a) rgb(66, 185, 131)rgba(66, 185, 131, 0.73) 支持
hls(a) hsl(153, 47%, 49%)hsla(153, 47%, 49%, 0.73) 支持
hsv(a) hsv(153, 47%, 49%)hsva(153, 47%, 49%, 0.73) 不支持
cmyk cmyk(20%, 35%, 74%, 53%) 不支持


其中,web支持颜色关键字、 hex(a)rgb(a)hls(a)四种方式。


image.png

<xy-color-picker defaultvalue="rgb(66, 185, 131)"></xy-color-picker>


value、颜色color


设置或返回颜色选择器的value属性值。值为合法的颜色值。默认返回当前格式下的颜色值。


返回颜色的详细信息color,可以将值转换成任意格式的颜色值。

image.png

//color
{
    h: 16.23529411764704
    s: 66.42857142857143
    v: 71.71875
    a: 1
    toCMYK: f,
    toHEXA: f,
    toHSLA: f,
    toHSVA:f,
    toRGBA: f,
}
color.toRGBA().toString()//返回RGBA的颜色值


方向dir


通过dir可以设置颜色悬浮层方向,默认为bottomleft,可以取值toprightbottomlefttoplefttoprightrighttoprightbottombottomleftbottomrightlefttopleftbottom

比如设置dir="topleft",则

<xy-color-picker defaultvalue="rgb(66, 185, 131)" dir="topleft"></xy-color-picker>


image.png

事件


当选好颜色后,按确定按钮可以触发change回调。

<xy-color-picker defaultvalue="rgb(66, 185, 131)" onchange="XyMessage.info('当前value: '+this.value)"></xy-color-picker>


其他触发方式

colorPicker.onchange = function(ev){
    //获取value的几种方式
    /*
    event:{
        detail:{
            value,
            color:{
                h: 16.23529411764704
                s: 66.42857142857143
                v: 71.71875
                a: 1
                toCMYK: f,
                toHEXA: f,
                toHSLA: f,
                toHSVA:f,
                toRGBA: f,
            }
        }
    }
    */
    console.log(this.value);
    console.log(this.color);
    console.log(ev.target.value);
    console.log(ev.detail.value);
    this.color.toRGBA().toString() //rgba(255,255,255,1)
}
colorPicker.addEventListener('change',function(ev){
    console.log(this.value);
    console.log(this.color);
    console.log(ev.target.value);
    console.log(ev.detail.value);
    this.color.toRGBA().toString() //rgba(255,255,255,1)
})


image.png


其他


xy-color-picker内部基于xy-popoverxy-color-pane实现。

<xy-popover >
    <xy-button class="color-btn"></xy-button>
    <xy-popcon>
        <xy-color-pane id="color-pane"></xy-color-pane>
        <div class="pop-footer">
            <xy-button id="btn-cancel">取消</xy-button>
            <xy-button type="primary" id="btn-submit">确认</xy-button>
        </div>
    </xy-popcon>
</xy-popover>


其中,xy-color-pane为颜色选择面板,可独立使用。

<xy-color-pane></xy-color-pane>

image.png


事件和属性与xy-color-picker一致。

colorPane.value = 'orangered';
colorPane.addEventListener('change',function(ev){
    console.log(this.value);
    console.log(this.color);
    console.log(ev.target.value);
    console.log(ev.detail.value);
    this.color.toRGBA().toString() //rgba(255,255,255,1)
})


小结


其实关于xy-color-pickerAPI很简单,大多数情况下onchange足够使用,如果想有定制的需求可以把xy-color-pane独立出来使用。


xy-color-picker是一个原生web组件,不限制于框架,可直接使用。如果想使用其他类似的组件,可关注xy-ui,汇集了其他各类常见交互组件,欢迎star~。

image.png


相关文章
|
4月前
|
前端开发 容器
css动画效果(边框线条流动效果)
css动画效果(边框线条流动效果)
|
3月前
|
前端开发
CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)
CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)
30 0
|
3月前
|
前端开发
css动画——文本飞入(通过letter-spacing实现)
css动画——文本飞入(通过letter-spacing实现)
18 0
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
588 0
|
前端开发
webkit-box-reflect,前端Css文字倒影,制作炫酷的时钟倒影效果.
webkit-box-reflect,前端Css文字倒影,制作炫酷的时钟倒影效果.
Revit二次开发—修改元素的Material Color(图形颜色)
Revit二次开发—修改元素的Material Color(图形颜色)
Revit二次开发—修改元素的Material Color(图形颜色)
|
前端开发
零基础CSS入门教程(10)——背景图片平铺不平铺
如果是repeat他会分成四块一样的也是默认平铺,repeat-x平行平铺两个,repeat-y上下平铺两个,而no-repeat他是取消平铺,只显示一个*/如果是repeat他会分成四块一样的也是默认平铺,repeat-x平行平铺两个,repeat-y上下平铺两个,而no-repeat他是取消平铺,只显示一个。什么叫平铺呢,就是图像在窗口上是如何铺设的,是横向一张一张的铺,还是不平铺只展示一张图片,还是纵向的一张一张的铺。我们本小节学习了图片的平铺和不平铺,我们以后对图片设置花样多了许多方法。
零基础CSS入门教程(10)——背景图片平铺不平铺
|
前端开发
前端案例-为盒子的四个角添加边框线
今天继续分享一个前端小demo来复习回顾一下知识点,依旧是很有趣的案例,分享给大家。 前端案例-为盒子的四个角添加边框线
395 0
前端案例-为盒子的四个角添加边框线
|
前端开发
巧用 background-clip 实现超强的文字动效
巧用 background-clip 实现超强的文字动效
231 0
巧用 background-clip 实现超强的文字动效
|
前端开发
妙用 background 实现花式文字效果
妙用 background 实现花式文字效果
187 0
妙用 background 实现花式文字效果