Angular 8通过颜色选择器在鼠标悬停时获得颜色

问题描述 投票:0回答:1

试图在Angular 8中构建自己的颜色选择器。我想使用this这样的色轮。我以为我可能会从mouseover事件中获取有用的数据,但我不知道这是否是goto。

<img
    (mouseover)="getColorOnMouseOver($event)"
    src="colorwheel.png"
    style="max-width: 500px; max-height: auto;"
>

我找到了一个有用的帖子(https://stackoverflow.com/a/59401835/12282474)。 Mabye,我可以使用此处显示的内容,并从colorwheel.png中获取每个像素的颜色...但是我对Angular确实很陌生,因此在我的项目中重新创建解决方案没有成功。

谢谢您的帮助!

html angular typescript mouseover color-picker
1个回答
0
投票

您走在正确的道路上。在有关如何制作自己的色轮的link以及关于如何使用带角度的画布的post上进行检查。该解决方案是使用jquery用js编写的,因此您始终可以将其更新为angular。它使用画布绘制色轮图像,然后使用mousemove函数(角度鼠标悬停)来获取指针的当前像素rbg信息。然后,您可以使用click事件锁定所需的颜色。

$(function(){

    // create canvas and context objects
    var canvas = document.getElementById('picker');
    var ctx = canvas.getContext('2d');

    // drawing active image
    var image = new Image();
    image.onload = function () {
        ctx.drawImage(image, 0, 0, image.width, image.height); // draw the image on the canvas
    }

    // select desired colorwheel
    var imagesrc="images/colorwheel1.png";
    switch ($(canvas).attr('var')) {
        case '2':
            imagesrc="images/colorwheel2.png";
            break;
        case '3':
            imagesrc="images/colorwheel3.png";
            break;
        case '4':
            imagesrc="images/colorwheel4.png";
            break;
        case '5':
            imagesrc="images/colorwheel5.png";
            break;
    }
    image.src = imageSrc;

    $('#picker').mousemove(function(e) { // mouse move handler
        if (bCanPreview) {
            // get coordinates of current position
            var canvasOffset = $(canvas).offset();
            var canvasX = Math.floor(e.pageX - canvasOffset.left);
            var canvasY = Math.floor(e.pageY - canvasOffset.top);

            // get current pixel
            var imageData = ctx.getImageData(canvasX, canvasY, 1, 1);
            var pixel = imageData.data;

            // update preview color
            var pixelColor = "rgb("+pixel[0]+", "+pixel[1]+", "+pixel[2]+")";
            $('.preview').css('backgroundColor', pixelColor);

            // update controls
            $('#rVal').val(pixel[0]);
            $('#gVal').val(pixel[1]);
            $('#bVal').val(pixel[2]);
            $('#rgbVal').val(pixel[0]+','+pixel[1]+','+pixel[2]);

            var dColor = pixel[2] + 256 * pixel[1] + 65536 * pixel[0];
            $('#hexVal').val('#' + ('0000' + dColor.toString(16)).substr(-6));
        }
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.