javascript - 如何给 HTML5 Canvas 色轮添加触摸事件?

标签 javascript html canvas

我正在尝试使用 HTML5 Canvas 色轮为 iOS 移动设备创建触摸事件,但无法正常工作。

我使用的代码:http://www.script-tutorials.com/html5-color-picker-canvas/

我将 mousemove 事件更改为 touch move 但这不起作用。我做错了什么?

    /**
 *
 * HTML5 Color Picker
 *
 * Licensed under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * Copyright 2012, Script Tutorials
 * http://www.script-tutorials.com/
 */

$(function(){
    var bCanPreview = true; // can preview

    // 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';
    image.src = imageSrc;

    $('#picker').touchmove(function(event) { // mouse move handler
        event.preventDefault();

        var touch = event.originalEvent.changedTouches[0];

        if (bCanPreview) {
            // get coordinates of current position
            var canvasOffset = $(canvas).offset();
            var canvasX = Math.floor( touch.pageX - canvasOffset.left);
            var canvasY = Math.floor( touch.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));
        }
    });
    $('#picker').click(function(e) { // click event handler
        bCanPreview = !bCanPreview;
    }); 
    $('.preview').click(function(e) { // preview click
        $('.colorpicker').fadeToggle("slow", "linear");
        bCanPreview = true;
    });
});

HTML5 色轮标记:

<div class="container">

        <!-- preview element -->
        <div class="preview"></div>

        <!-- colorpicker element -->
        <div class="colorpicker">
            <canvas id="picker" var="1" width="300" height="300"></canvas>

            <div class="controls" style="display: none;">
                <div><label>R</label> <input type="text" id="rVal" /></div>
                <div><label>G</label> <input type="text" id="gVal" /></div>
                <div><label>B</label> <input type="text" id="bVal" /></div>
                <div><label>RGB</label> <input type="text" id="rgbVal" /></div>
            </div>
        </div>
    </div>

最佳答案

touchmove 不是有效的事件名称。

您可能想改用touch

关于javascript - 如何给 HTML5 Canvas 色轮添加触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484107/

相关文章:

javascript - 如何将相同的 jquery 添加到不同的 div 但具有不同的内容?

javascript - jQuery - aria-controls vs data attributes to identify/select DOM element - 哪个是首选方法?

css - 使用选取框在显示的图像中避免间距并固定唯一尺寸

html - 是否可以只设置图像替代文本的一部分样式?

javascript - 如何重新创建此 "wavy"图像效果?

Java SWT : Change colour of line when using GC. 绘图线

android - 如何使用按钮清除android中的 Canvas ?

javascript - 在 javascript 中创建 cloudant View 时如何转义冒号和其他特殊字符

html - 想要使 Font Awesome 图标可点击

javascript - 如何使用 mvvm 在日历中设置多个日期?