当前位置: 首页 > 面试题库 >

在鼠标悬停时从画布获取像素颜色

田文景
2023-03-14
问题内容

是否可以在鼠标下获取RGB值像素?有完整的例子吗?这是我到目前为止的内容:

<script>
function draw() {
  var ctx = document.getElementById('canvas').getContext('2d');
  var img = new Image();
  img.src = 'Your URL';

  img.onload = function(){
    ctx.drawImage(img,0,0);


  };

  canvas.onmousemove = function(e) {
        var mouseX, mouseY;

        if(e.offsetX) {
            mouseX = e.offsetX;
            mouseY = e.offsetY;
        }
        else if(e.layerX) {
            mouseX = e.layerX;
            mouseY = e.layerY;
        }
        var c = ctx.getImageData(mouseX, mouseY, 1, 1).data;

        $('#ttip').css({'left':mouseX+20, 'top':mouseY+20}).html(c[0]+'-'+c[1]+'-'+c[2]);
  };
}

</script>

问题答案:

这是一个完整的,独立的示例。首先,使用以下HTML:

<canvas id="example" width="200" height="60"></canvas>
<div id="status"></div>

相关的JavaScript:

// set up some sample squares
var example = document.getElementById('example');
var context = example.getContext('2d');
context.fillStyle = "rgb(255,0,0)";
context.fillRect(0, 0, 50, 50);
context.fillStyle = "rgb(0,0,255)";
context.fillRect(55, 0, 50, 50);

$('#example').mousemove(function(e) {
    var pos = findPos(this);
    var x = e.pageX - pos.x;
    var y = e.pageY - pos.y;
    var coord = "x=" + x + ", y=" + y;
    var c = this.getContext('2d');
    var p = c.getImageData(x, y, 1, 1).data; 
    var hex = "#" + ("000000" + rgbToHex(p[0], p[1], p[2])).slice(-6);
    $('#status').html(coord + "<br>" + hex);
});

上面的代码假定存在jQuery和以下实用程序功能:

function findPos(obj) {
    var curleft = 0, curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
        return { x: curleft, y: curtop };
    }
    return undefined;
}

function rgbToHex(r, g, b) {
    if (r > 255 || g > 255 || b > 255)
        throw "Invalid color component";
    return ((r << 16) | (g << 8) | b).toString(16);
}



// set up some sample squares

var example = document.getElementById('example');

var context = example.getContext('2d');

context.fillStyle = "rgb(255,0,0)";

context.fillRect(0, 0, 50, 50);

context.fillStyle = "rgb(0,0,255)";

context.fillRect(55, 0, 50, 50);



$('#example').mousemove(function(e) {

    var pos = findPos(this);

    var x = e.pageX - pos.x;

    var y = e.pageY - pos.y;

    var coord = "x=" + x + ", y=" + y;

    var c = this.getContext('2d');

    var p = c.getImageData(x, y, 1, 1).data;

    var hex = "#" + ("000000" + rgbToHex(p[0], p[1], p[2])).slice(-6);

    $('#status').html(coord + "<br>" + hex);

});



function findPos(obj) {

    var curleft = 0, curtop = 0;

    if (obj.offsetParent) {

        do {

            curleft += obj.offsetLeft;

            curtop += obj.offsetTop;

        } while (obj = obj.offsetParent);

        return { x: curleft, y: curtop };

    }

    return undefined;

}



function rgbToHex(r, g, b) {

    if (r > 255 || g > 255 || b > 255)

        throw "Invalid color component";

    return ((r << 16) | (g << 8) | b).toString(16);

}


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<canvas id="example" width="200" height="60"></canvas>

<div id="status"></div>


 类似资料:
  • 我在HTML中添加了SVG。我想做的是,当鼠标悬停在SVG上时,将其更改为淡黄色,转换为1s。 HTML中的CSS是: 超文本标记语言的内容: 猛禽。svg内容如下: 或者,我尝试使用CSS在鼠标移动期间改变颜色: 它也不能工作,因为CSS属性不能更改SVG填充颜色。 我错过了什么?我必须使用内联SVG吗?

  • 问题内容: 我试图当鼠标移到图像的左下方时出现一个小框。在该框内,将有一个指向其他页面的链接。 这有点类似于我想要的东西,但是盒子要更小并且不连接到图像的边框。 我已经尝试了一切,但找不到答案。而且我不想使用工具提示,更不用说我没有任何JavaScript知识了。我真的希望这是CSS。 问题答案: 这是在CSS3中使用伪元素。 HTML: CSS: 相反,这是使用jquery达到相同结果的一种方式

  • 问题内容: libgdx中是否有任何侦听器可以让我检测到鼠标悬停而不是鼠标悬停。在场景2D的按钮类中,您有2种方法isOver和isPressed,但是它们执行相同的操作…还有其他问题吗?还有另一种方法来检测鼠标悬停在actor上吗? 问题答案: 还有的可以连接到和它提供的事件,如下面的: 该事件从根本上来说意味着鼠标开始悬停在角色上,意味着它“离开”了角色的区域。它还有一个事件,您可以使用该事件

  • 问题内容: 我的问题.. 我有许多图像(在超链接中),并且我希望每个图像在鼠标悬停时变暗(即,使用具有高不透明度或某些功能的黑色蒙版),然后在mouseout上恢复正常。但是我想不出最好的方法。 我试过了.. jQuery颜色动画和一些javascript参考。 使用javascript设置图像的不透明度。 我不要 图像从80%的不透明度开始,然后在鼠标悬停时达到100%(这很容易)。 要在2张图

  • 问题内容: 有时,我可以选择使用CSS元素:悬停或JavaScript onmouseover来控制页面上html元素的外观。考虑以下情况,其中div包装了输入 我希望输入将鼠标光标悬停在div上时更改背景色。CSS方法是 JavaScript方法是 每种方法的优点和缺点是什么?CSS方法是否适用于大多数Web浏览器?JavaScript比CSS慢吗? 问题答案: :hover的问题是IE6仅在链

  • 本文向大家介绍如何在鼠标悬停时使用jQuery动画化背景颜色的变化?,包括了如何在鼠标悬停时使用jQuery动画化背景颜色的变化?的使用技巧和注意事项,需要的朋友参考一下 若要更改背景颜色,请使用mouseenter事件。放置鼠标光标时背景色发生变化: 鼠标光标放在以下元素上: 您可以尝试运行以下代码,以了解如何为鼠标悬停时的背景色变化设置动画: 示例