实现图片区域可点击,实际上使用map是可以的,但是适配效果并不好,图片只能是固定大小的值,而且点都被写死了。

在这里,我使用的js基于canvas写的一个小工具。可以圈出你需要点击的部分,然后生成一串json,在预览页面就可以看见效果了;

在实际应用中,只要用工具处理一下图片,再把数据存入数据库,就很方便了;

使用工具时,先上传图片。然后就可以圈了,圈完一定要记得,点击保存数据,,,接着就可以预览了,预览点击的效果,可以看控制台,

首先是工具

首先工具的html

*{

padding: 0;

margin: 0;

font-family: "微软雅黑";

}

.hide{

display: none;

}

canvas{

border: 1px solid red;

display: block;

margin: 0 auto;

background-position: 0 0;

background-repeat: no-repeat;

background-size: 100% 100%;

}

.cover{

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

background: rgba(0,0,0,0.4);

}

.cover p{

text-align: center;

}

.btn{

width: 800px;

margin: 0 auto;

padding-top: 10px;

}

.btn p{

padding-bottom: 10px;

}

a{

text-decoration: none;

color: #000;

}

button{

line-height: 30px;

padding: 0 10px;

cursor: pointer;

border-radius: 4px;

background: #449d44;

color: #fff;

border: none;

}

保存数据

导入数据

查看数据

预览效果

撤销

清除

基础宽度:

基础高度:

url地址:

描述:

确认

接着是工具的js代码

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

var ctx = canvas.getContext('2d');

ctx.lineWidth = 1;

ctx.strokeStyle="green";

/*ctx.beginPath();

ctx.moveTo(10, 100);

ctx.lineTo(300,100);

ctx.stroke();

ctx.closePath();*/

var run = false;

var moduleList = [];

var path = [];

var $baseImg = '';

var $cover = $(".cover");

var $urlAddress = $('#urlAddress');

var $dec = $("#dec");

var $baseWidth = $('#width');

var $baseHeight = $('#height');

canvas.onmousedown = function(e){

//console.log(e.clientX);

//console.log(e.offsetX);

ctx.beginPath();

ctx.moveTo(e.offsetX, e.offsetY);

path.push({

x:e.offsetX,

y:e.offsetY

});

run = true;

}

canvas.onmousemove = function(e){

//var x = e.offsetX;

if(run){

ctx.lineTo(e.offsetX, e.offsetY);

ctx.stroke();

path.push({

x:e.offsetX,

y:e.offsetY

});

}

}

canvas.onmouseup = function(e){

run = false;

ctx.closePath();

if(path.length > 10){

$cover.removeClass('hide');

}else{

path = [];

}

}

//保存数据

function saveData(){

var data = {

"dec":"图片点击",

"version":"1",

"img":$baseImg,

"module":moduleList,

"baseWidth":$baseWidth.val(),

"baseHeight":$baseHeight.val()

}

console.log(JSON.stringify(data));

localStorage.setItem("data",JSON.stringify(data));

}

//查看数据

function seeData(flag){

var data = {

"dec":"图片点击",

"version":"1",

"img":$baseImg,

"module":moduleList,

"baseWidth":$baseWidth.val(),

"baseHeight":$baseHeight.val()

}

if(flag){

console.log(JSON.stringify(data));

}

return data;

}

//图片背景

$('#imgload').on('change',function(){

imgToBase64(this.files[0],function(result){

console.log(result);

var base64Data = 'url(' + result + ')';

$(canvas).css({'background-image': base64Data});

$baseImg = result;

});

});

//转化为base64

function imgToBase64(file,callback){

var reader = new FileReader();

reader.onload = function (e) {

callback(e.target.result);

};

reader.readAsDataURL(file); // 读取完后会调用onload方法

}

//确认信息

$cover.on('click','.contain',function(){

if($urlAddress.val() == ''){

alert('地址不能为空');

}else{

moduleList.push({

id:getName(),

path:path,

url:$urlAddress.val(),

dec:$dec.val()

});

path = [];

$cover.addClass('hide');

}

});

//修改高度和宽度

$baseWidth.on('change',function(){

$(canvas).css({'width': $(this).val()});

});

$baseHeight.on('change',function(){

$(canvas).css({'height': $(this).val()});

});

//随机获取名称

function getName(){

var timer = new Date();

var arr = JSON.stringify(timer).replace(/:|-|"/g ,'').split('.');

var str = arr.join('');

return str;

}

//导入模板

function getData(){

var data = JSON.parse(localStorage.getItem("data"));

if(data){

moduleList = data.module;;

$baseImg = data.img;

drawn(data);

}else{

alert('没有模板数据.');

}

}

//撤销

function reduo(){

moduleList.pop();

ctx.clearRect(0, 0, canvas.width, canvas.height);

drawn(seeData());

}

//清除所有

function clearAll(){

moduleList = [];

ctx.clearRect(0, 0, canvas.width, canvas.height);

}

//给数据,画出来

function drawn(data){

ctx.clearRect(0, 0, canvas.width, canvas.height);

var module = data.module;

var base64Data = 'url(' + data.img + ')';

$(canvas).css({'background-image': base64Data});

$baseWidth.val(data.baseWidth);

$baseHeight.val(data.baseHeight);

$(canvas).css({'width': data.baseWidth,'height':data.baseHeight});

//开始画

for(var i = 0; i < module.length;i++){

var path = module[i].path;

ctx.beginPath();

ctx.moveTo(path[0].x, path[0].y);

for(var j = 1; j < path.length; j++){

ctx.lineTo(path[j].x, path[j].y);

ctx.stroke();

}

ctx.closePath();

}

}

最后是preview.html预览

*{

padding: 0;

margin: 0;

}

body,html{

width: 100%;

height: 100%;

}

canvas{

background-position: 0 0;

background-repeat: no-repeat;

background-size: 100% 100%;

width: 100%;

height: 100%;

}

.wrap{

border: 1px solid red;

margin: 0 auto;

width: 800px;

height: 600px;

}

var $canvas = $('#canvas');

var canvas = $canvas[0];

var data = JSON.parse(localStorage.getItem("data"));

var ctx = canvas.getContext('2d');

ctx.lineWidth = 1;

ctx.strokeStyle="rgba(0,0,0,0)";

var module = data.module;

var rateWidth = $canvas.width()/data.baseWidth;

var rateHeight = $canvas.height()/data.baseHeight;

var base64Data = 'url(' + data.img + ')';

$canvas.css({'background-image': base64Data});

console.log(rateWidth);

console.log(rateHeight);

//判断点击了图片的某个地方

canvas.onclick = function(e){

var x = event.pageX - canvas.getBoundingClientRect().left;

var y = event.pageY - canvas.getBoundingClientRect().top;

for(var i = 0; i < module.length;i++){

var path = module[i].path;

ctx.beginPath();

ctx.moveTo(path[0].x*rateWidth, path[0].y*rateHeight);

for(var j = 1; j < path.length; j++){

ctx.lineTo(path[j].x*rateWidth, path[j].y*rateHeight);

}

ctx.closePath();

if(ctx.isPointInPath(x, y)){

clickCall(module[i]);

return;

}

}

};

//点击中了选中的区域

function clickCall(result){

console.log(result.dec);

console.log(result.url);

}

效果

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

js小学生图区_js实现图片区域可点击大小随意改变(适用移动端)代码实例相关推荐

  1. js小学生图区_js 图片区域可点击,适配移动端,图片大小随意改变

    实现图片区域可点击,实际上使用map是可以的,但是适配效果并不好,图片只能是固定大小的值,而且点都被写死了. 在这里,我使用的js基于canvas写的一个小工具.可以圈出你需要点击的部分,然后生成一串 ...

  2. js小学生图区_js读取本地图片并显示

    版权声明:本文为博主原创文章,未经博主允许不得转载. 根据项目需要,需要选择本地图片并显示在页面上,然后上传至服务器.因为自身刚刚接触js,所以比较生疏,碰到问题吼,幸好有强大的网络,搜索很多有用的资 ...

  3. js小学生图区_多种方式实现js图片预览

    js多种方式图片预览-持续更新 //设置自己的变量存储区 var Util = { file : $("#file"), image_show:$("#img_show& ...

  4. js小学生图区_推荐12个最好的 JavaScript 图形绘制库

    众多周知,图形和图表要比文本更具表现力和说服力.图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等.可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和 Web  ...

  5. Auto.js 找图 找色 剪切图片 坐标区域计算方法

  6. java键盘控制英雄左右移动_js实现键盘操作实现div的移动或改变的原理及代码

    昨天记录了获取键盘按键的值的事件,有了值,无非就是针对不同值做不同的操作嘛,而且之前曾经在写贪吃蛇时也用到过.结果一捯饬,又是好久的一段时间,所以感觉有必要记录下的,一方面确有可取之处,另一方面也对自 ...

  7. html制作心形状图片,HTML5 Canvas实现玫瑰曲线和心形图案的代码实例

    效果图: 提示:把代码复制到一个html文件中并保存,直接打开即可看到效果. 实现代码: HTML5 Demo #apDiv1 { position:absolute; width:120px; he ...

  8. java中的js是什么意思_js和java的区别是什么?

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. js(JavaScript)是一种直译式 ...

  9. JS兼容各个浏览器的本地图片上传即时预览效果

    JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...

最新文章

  1. gradle的基本设置
  2. [html] 说说你对H5的ServiceWorker的理解,它有什么运用场景?
  3. asterisk 互联
  4. Java面试易错题精选
  5. 汽车电子研究报告:下一个苹果产业链
  6. Windows 2000 Server Resource Kit CD BT下载地址
  7. 如何使用 DiskGenius 合并分区
  8. 八类网线和七类网线的区别_七类网线和六类网线区别有哪些
  9. 深度学习面试每日一题
  10. 互联网周刊_11年第15期(115网盘下载)
  11. 继电器写法c语言单片机,51单片机-继电器编程
  12. OkHttp3使用介绍
  13. 新手使用PS心得-技巧
  14. 基于惯性轮倒立摆原理的自行车
  15. 升级版的冒泡排序Java
  16. 小工具:用C++读取TGA并输出数据到文本
  17. 正则表达式判断以字母开头的
  18. SAP上云——助力制造业数字化转型
  19. SQL注入——基于时间的盲注(sqli-labs less9)
  20. HDU - 相遇周期

热门文章

  1. PhoneGap开发环境搭建
  2. 推荐几个漂亮实用的JS菜单
  3. Linux 命令(108)—— ifconfig 命令
  4. C++11 Unicode 支持
  5. Python_study_day_1_while_if
  6. missfresh问题记录
  7. 一个通配符引起的错误
  8. CountDownLatch和Semaphore使用场景
  9. idea建springcloud项目_idea创建springcloud项目图文教程(EurekaServer注册中心)
  10. 写给Git初学者的7个建议