;(function($){var PLUGIN_NAME = "kzwClickableMap"; var ImplementationClass = function(target, config) { var settings = $.extend({}, $[PLUGIN_NAME].defaults, config); var myself = this, imageData = null, pixels = null, imageWidth = 0, imageHeight = 0, currentArea = ""; $(target).data(PLUGIN_NAME, myself); function _constructor_() { if(!settings.colorMap) {return;} if(!window.CanvasRenderingContext2D) {return;} imageData = null; var image = new Image(); image.onload = function () { imageWidth = this.width; imageHeight = this.height; var canvas = document.createElement("canvas"); canvas.setAttribute("width", imageWidth); canvas.setAttribute("height", imageHeight); var context = canvas.getContext("2d"); context.drawImage(this, 0, 0); imageData = context.getImageData(0, 0, imageWidth, imageHeight); pixels = imageData.data; $(target).bind('click', onClick).hover(hover, mouseOut); }; image.src = settings.colorMap; } $.extend( myself, { havingnopoint : "" }); _constructor_(); function onClick(event) {if(!settings.onHit) { return; }event.preventDefault();getPixel(event);settings.onHit(event);} function hover(event) {if(!settings.onChangeArea) { return; }$(target).on('mousemove', checkPixel);} function mouseOut(event) {if(!settings.onChangeArea) { return; }$(target).off('mousemove', checkPixel);} function checkPixel(event) {getPixel(event);if(currentArea != event.hitPixelColor) {currentArea = event.hitPixelColor;settings.onChangeArea(event);}} function getPixel(event) {if(!pixels) { return; } event.hitX = Math.round(event.pageX - Math.round($(target).offset().left)); event.hitY = Math.round(event.pageY - Math.round($(target).offset().top)); event.hitPixelColor = ""; event.hitPixel = ['', 0, 0, 0, 0]; var index = (event.hitX + event.hitY * imageWidth) * 4; event.hitPixelColor = "#" + zp(pixels[index + 0].toString(16)) + zp(pixels[index + 1].toString(16)) + zp(pixels[index + 2].toString(16)); event.hitPixel[0] = pixels[index + 0]; event.hitPixel[1] = pixels[index + 1]; event.hitPixel[2] = pixels[index + 2]; event.hitPixel[3] = pixels[index + 3]; } function zp(s) { return ("00" + s).slice(-2); } }; $[PLUGIN_NAME] = { defaults: {colorMap: null, onHit: null, onChangeArea: null}}; $.fn[PLUGIN_NAME] = function(config){return this.each(function(i){new ImplementationClass(this, config);});}; })(jQuery);