js颜色拾取器

在用百度热力图时,接触到图例值域,故抽空做一简单的例子。

预览地址:http://bl.ocks.org/chengquan223/raw/5cf20ce2cbc6e1ea3d83/

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>颜色取色器colorPicker</title>
    <style type="text/css">
        html,body{margin:0;padding:0;font-size:12px}#content{margin:20px auto;width:600px;height:300px}.content-left{float:left;width:400px;height:inherit}.content-right{float:left;width:180px;height:inherit;margin-left:18px}.canvas-scale{height:15px;top:25px;padding:0;margin:0;float:left}.canvas-selColor{float:left;width:100%;height:260px;margin-top:10px}#colorCanvas{cursor:crosshair;float:left}
    </style>
</head>
<body>
    <div id="content">
        <div class="content-left">
            <canvas id="colorCanvas" width="400" height="15"></canvas>
            <div class="canvas-scale">
                <canvas id="rangeCanvas" width="400" height="15"></canvas>
            </div>
            <div class="canvas-selColor"></div>
        </div>
        <div class="content-right">
            <input type="text" id="colorValue" size="10" />值域<br /><br />
            <input type="text" id="position" size="10" />canvas坐标<br /><br />
            <input type="text" id="rgb" size="10">rgb颜色值<br /><br />
            <input type="text" id="color" size="10">16进制颜色码<br /><br />
        </div>
    </div>
</body>
</html>
<script type="text/javascript">
    var colorCanvas = document.getElementById("colorCanvas");
    var context = colorCanvas.getContext("2d");
    var colorGradient = { 0: 'rgba(100,255,51,1)', 0.167: 'rgba(153,255,51,1)', 0.333: 'rgba(204,255,51,1)', 0.5: 'rgba(255,255,71,0.8)', 0.667: 'rgba(255,250,150,1', 0.833: 'rgba(255,187,102,0.9)', 1: 'rgba(255,119,68,0.9)' };
    var sortNumber = function (a, b) {
        return a - b;
    };
    var Picker = function () {
        this.range = [50, 100, 150, 200, 300];
        this.drawColor = function () {
            var grad = context.createLinearGradient(0, 0, colorCanvas.width, colorCanvas.height);
            for (var gradient in colorGradient) {
                grad.addColorStop(gradient, colorGradient[gradient]);
            }
            context.fillStyle = grad;
            context.fillRect(0, 0, colorCanvas.width, colorCanvas.height);
        };
        this.drawRange = function () {
            var rangeCanvas = document.getElementById("rangeCanvas");
            var width = rangeCanvas.width;
            var ctx = rangeCanvas.getContext("2d");
            var len = this.range.length;
            var maxValue = this.range.sort(sortNumber)[len - 1];//数组最大value
            ctx.drawLine = function (beginX, beginY, endX, endY) {
                this.moveTo(beginX, beginY);
                this.lineTo(endX, endY);
            };
            ctx.fillText("0", 0, 14);
            ctx.save();
            ctx.translate(0.5, 0.5); //消除锯齿
            ctx.lineWidth = 1;
            ctx.beginPath();
            ctx.drawLine(0, 0, 0, 4); //第一个刻度
            for (var i = 0; i < len - 1; i++) {
                var px = Math.round(width * this.range[i] / maxValue);
                ctx.fillText(this.range[i], px - 8, 14);
                ctx.drawLine(px, 0, px, 4);
            }
            var endPx = Math.round(width * this.range[len - 1] / maxValue);
            ctx.fillText(this.range[len - 1], endPx - 18, 14);
            ctx.drawLine(endPx - 1, 0, endPx - 1, 4); //最后一个刻度
            ctx.stroke();
        };
        this.drawCircle = function (point, color) {
            context.clearRect(0, 0, colorCanvas.width, colorCanvas.height);
            this.drawColor();
            context.beginPath();
            context.arc(point.X, point.Y, 2, 0, 360, false);
            context.fillStyle = color;
            context.fill();
            context.lineWidth = 1;
            context.strokeStyle = "#000";
            context.stroke();
            context.save();
            context.closePath();
        };
        this.d2Hex = function (d) {
            // Converts a decimal number to a two digit Hex value
            var hex = Number(d).toString(16);
            while (hex.length < 2) {
                hex = "0" + hex;
            }
            return hex.toUpperCase();
        };
        this.getRgbColor = function (point) {
            var imageData = context.getImageData(0, 0, colorCanvas.width, colorCanvas.height);
            var data = imageData.data;
            var i = ((point.Y * colorCanvas.width) + point.X) * 4;
            var rgb = [], color = '#', objRgbColor = { "rgb": rgb, "color": color };
            for (var j = 0; j < 3; j++) {
                rgb.push(data[i + j]);
                color += this.d2Hex(data[i + j]);
            }
            objRgbColor.color = color;
            return objRgbColor;
        };
        this.getIntOffset = function (e) {
            var evt = e || window.event;
            var srcObj = evt.target || e.srcElement;
            if (e.offsetX) {
                return { X: parseInt(e.offsetX), Y: parseInt(e.offsetY) };
            } else {
                var rect = srcObj.getBoundingClientRect();
                return { X: parseInt(e.clientX - rect.left), Y: parseInt(e.clientY - rect.top) };
            }
        };
        this.getValue = function (point) {
            return Math.round(this.range[this.range.length - 1] * point.X / colorCanvas.width);
        };
        this.setColor = function (point) {
            var objRgbColor = this.getRgbColor(point);
            var rgb = "rgb(" + objRgbColor.rgb.join(",") + ")";
            this.drawCircle(point, color);
            document.getElementsByClassName("canvas-selColor")[0].style.background = rgb;
            document.getElementById("colorValue").value = this.getValue(point);
            document.getElementById("position").value = point.X + "," + point.Y;
            document.getElementById("rgb").value = rgb;
            document.getElementById("color").value = objRgbColor.color;
        };
    };
    var initPicker = function () {
        var picker = new Picker();
        picker.drawColor();
        picker.drawRange();
        colorCanvas.onclick = function (e) {
            var point = picker.getIntOffset(e);
            picker.setColor(point);
        }
    }
    initPicker();
</script>
View Code

 

转载于:https://www.cnblogs.com/my-codelife/p/5284581.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element 腾讯地图坐标拾取代码是一种用于在网页中实现腾讯地图坐标拾取功能的代码。具体实现步骤如下: 首先,要在网页中引入腾讯地图的 API。可以通过在 HTML 文件的 `<head>` 标签内添加以下代码来引入 API: ``` <script src="https://map.qq.com/api/js?v=2.exp&libraries=coordtool"></script> ``` 然后,在需要显示地图的元素中添加一个 `<div>` 标签,用于容纳地图显示。例如: ``` <div id="mapContainer" style="width: 100%; height: 400px;"></div> ``` 接着,在 JavaScript 文件中编写代码来创建地图和添加坐标拾取功能。首先要创建地图实例,并指定显示地图的容和初始中心位置,例如: ``` var map = new qq.maps.Map(document.getElementById("mapContainer"), { center: new qq.maps.LatLng(39.916527, 116.397128), zoom: 12 }); ``` 然后,创建一个坐标拾取的实例,并绑定在地图上。这样当用户在地图上点击时,会触发相应的事件处理函数,例如: ``` var coordPicker = new qq.maps.CoordPicker(map, { draggable: true, draggableCursor: 'crosshair', zoomOnDoubleClick: true, zoomOnDoubleClickCursor: 'pointer' }); ``` 最后,可以在适当的位置显示用户选取的坐标。例如,在 HTML 文件中添加一个 `<p>` 标签,用于显示用户选择的坐标,然后在事件处理函数中更新其内容,例如: ``` <p id="coordDisplay"></p> coordPicker.addListener("coordpicked", function(event) { var coord = event.coord; document.getElementById("coordDisplay").innerText = "选择的坐标是:(" + coord.getLat().toFixed(6) + ", " + coord.getLng().toFixed(6) + ")"; }); ``` 以上就是 element 腾讯地图坐标拾取代码的基本实现过程。通过引入腾讯地图 API,创建地图实例并添加坐标拾取功能,可以使用户在地图上选择坐标并在页面上显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值