美文网首页
Web 实现拾色器

Web 实现拾色器

作者: 不敢大声说话的web小萌新 | 来源:发表于2021-04-12 13:55 被阅读0次

根据 getgetImageData 实现拾色器功能

getgetImageData API 定义:

getImageData() 方法返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据。

封装一个方法获取拾色器参数

class PickColor {
    constructor({ element, bgImgSrc, style }) {
        this.cavs = document.createElement('canvas');
        element.appendChild(this.cavs);
        // 设置canvs 内部属性样式
        for (let key in style) {
            this.cavs.style[key] = style[key]
        }
        // 设置canvs的 宽高
        this.cavs.height = element.clientHeight;
        this.cavs.width = element.clientWidth;
        // 视窗相对合集
        this.cavsClientRect = element.getBoundingClientRect();
        this.colorValue = null;

        // 将图片传入画布
        this.ctx = this.cavs.getContext('2d');
        this.bgImg = new Image();
        this.bgImg.src = bgImgSrc;
        // 加载图片
        this.bgImg.onload = () => {
            this.ctx.drawImage(this.bgImg, 0, 0, this.cavs.width, this.cavs.height);
        }
        // 捕获节点执行对应方式
        this.cavs.addEventListener("click", this._pickColor, true);
        this.cavs.oncontextmenu = () => false;
    }

    // 拾取颜色
    _pickColor = (event) => {
        this._clearCanvas(); //拾取新的颜色的时候清空画布
        let loc = this._getCoordinate(event.pageX, event.pageY);
        let { data } = this.ctx.getImageData(loc.x, loc.y, 1, 1);
        this._drawDot(loc); //获取到rgba后画点;
        let r = data[0];
        let g = data[1];
        let b = data[2];
        let a = Math.round(data[3] / 255 * 100) / 100;
        let rHex = r.toString(16);
        r < 16 && (rHex = "0" + rHex);
        let gHex = g.toString(16);
        g < 16 && (gHex = "0" + gHex);
        let bHex = b.toString(16);
        b < 16 && (bHex = "0" + bHex);
        let rgbColor = `rgb(${r},${g},${b})`;
        let rgbaColor = `rgba(${r},${g},${b},${a})`;
        let hexColor = `#${rHex}${gHex}${bHex}`;
        this.colorValue = {
            rgba: rgbaColor,
            rgb: rgbColor,
            hex: hexColor,
            r: r,
            g: g,
            b: b,
            a: a
        }
        return this.colorValue;
    }

    // 获取真实的坐标
    _getCoordinate(pageX, pageY) {
        let coordinate = {
            x: pageX - this.cavsClientRect.x,
            y: pageY - this.cavsClientRect.y
        }
        return coordinate;
    }

    // 清空画布
    _clearCanvas() {
        let height = this.cavs.height;
        let width = this.cavs.width;
        this.ctx.clearRect(0, 0, width, height);
        //清空画布后将背景图片添加
        this.ctx.drawImage(this.bgImg, 0, 0, this.cavs.width, this.cavs.height);
    }

    // 绘制一个点
    _drawDot(loc, r = 8) {
        this.ctx.shadowBlur = 10;
        this.ctx.shadowColor = 'rgba(0,0,0,0.3)';
        this.ctx.lineWidth = 2;
        this.ctx.strokeStyle = 'rgba(255,255,255,.8)';
        this.ctx.beginPath();
        this.ctx.arc(loc.x, loc.y, r, 0, 4 * Math.PI);
        this.ctx.stroke();
    }

    // 获取点击点的设置
    getColor() {
        return this.colorValue;
    }
}

使用方法

let canvs = new PickColor({
    element: document.getElementById('canvs'),
    bgImgSrc: './img/bgcolor.png',
    style: {
        borderRadius: '50%',
    }
})

gitee地址

https://gitee.com/Cliaoxiang/color-picker

相关文章

  • <HTTP权威指南>读书笔记 ---- Web服

    Web服务器 Web服务器的实现 Web服务器会对HTTP请求进行处理并提供响应。术语"Web服务器"可以用来表示...

  • HTTP学习笔记

    Web 页面的实现 Web 基于 HTTP 协议通信 客户端(Client)的 Web 浏览器从 Web 服务器端...

  • linux挂载windows服务器某个文件夹

    场景 linux服务器为web服务器,windows为资源服务器 通过web服务器访问windows资源 实现方案...

  • Django 学习笔记-1 socket 和 WSGI

    1. 用 socket 实现一个简单的 Web 服务器 2. 用 wsgiref 实现一个简单的 Web 服务器 ...

  • Nginx反向代理配置

    首先部署实施后端Web服务器1)部署后端Web1服务器后端Web服务器可以简单使用yum方式安装httpd实现We...

  • 使用nodejs实现web服务器与客户端的交互

    使用nodejs实现web服务器与客户端的交互 使用nodejs实现web服务器与客户端的交互 1.实验目的: 使...

  • 使用HTTP模块搭建服务器

    使用HTTP模块搭建服务器 实现clock时钟的web服务器

  • day01

    Java Web编程 Tomcat 服务器 是 Apache 提供的 Web Server, 可以实现Http协议...

  • 监听器

    一、监听器定义 现实生活 -web监听器 二、web监听器应用 三、创建监听器 1、创建一个实现监听器接口的类。 ...

  • 熟悉后端语言

    问题 简单描述下web 服务器、PHP、数据库、浏览器是如何实现动态网站的? WEB服务器:浏览器通过输入的域名通...

网友评论

      本文标题:Web 实现拾色器

      本文链接:https://www.haomeiwen.com/subject/cwhxlltx.html