实现图片区域可点击,实际上使用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和jauery的路径。。

体验地址:如果需要,联系博主

js小学生图区_js 图片区域可点击,适配移动端,图片大小随意改变相关推荐

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

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

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

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

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

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

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

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

  5. 如何用js实现点击图片切换为另一图片,再次点击恢复到原图片

    如何用js实现点击图片切换为另一图片,再次点击恢复到原图片 <!DOCTYPE html> <html lang="en"> <head>< ...

  6. js实现绑定多个按钮并当点击某个按钮时改按钮颜色改变

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  7. python图像处理——图片区域颜色替换小工具

    python图像处理--图片区域颜色替换小工具 使用场景 图片区域颜色替换小工具使用python开发,可用于选取图片相同颜色的区域,可设定选择精度,可自由选择颜色,将区域的颜色进行替换.可使用橡皮擦工 ...

  8. 在html中怎么插入动态图片,如何在gif中插入图片 动态图片某1帧插入图片并控制显示时间|动态图片中插入图片...

    大家还记得我以前的一个教程嘛?就是如何在视频中插入图片并控制其显示时间,有印象的话就太棒了,没印象的或就点击上边的文字自己做一下功课吧!! 今天的教程内容和上边所讲到的教程有点相似,都是插入图片,但是 ...

  9. Java通过JfreeChart生成转Base64图片字符串(饼图、折线图、柱状图、折线图-多条、3D柱状图、气泡图、时序图、曲线图、区域图、分布图、联合分类图、双X轴图、K线图、柱状图-横向等图)

    工具类 CreatLineChart.java package DrawLine;import java.awt.BasicStroke; import java.awt.Color; import ...

最新文章

  1. 电子计算机发展迅,ENIAC问世以来的短短的四十多年中,电子计算机的发展异常迅速...
  2. 什么限制了GNN的能力?首篇探究GNN普适性与局限性的论文出炉
  3. 大神总结的80个Python练手项目列表
  4. Java学习笔记十(注解)
  5. libvirt(virsh命令介绍)
  6. codeforces 269B Greenhouse Effect
  7. 从Chrome源码看audio/video流媒体实现二
  8. pulse 去马赛克软件_细致到毛孔头发 神还原的高清大图!AI去马赛克新算法
  9. import pandas as pd什么意思_【医学名词】多发性骨髓瘤MR、SD、PD分别是什么意思?...
  10. 会声会影2022美颜功能介绍 教你玩转视频美颜
  11. Python地理数据处理相关模块的安装方法
  12. DHT爬虫和使用BEP协议完成metadata的下载(BT下载)
  13. Linux从图形界面切换到文本界面快捷键不好用的解决方法
  14. SSE(Server-Sent Events)| 前后端demo参考
  15. 面试算法———回溯经典题目
  16. Word利用Aurora插入伪代码
  17. Windows pytorch编译安装SoftPool
  18. 数据库建模工具UML
  19. 无人机在海洋行业中的应用
  20. 系统MTU值的更改方法

热门文章

  1. Oracle 中select XX_id_seq.nextval from dual 什么意思呢?
  2. user-select的详细用法
  3. 阿里云服务器以及CDN支持IPV6的方法
  4. 关于MPU6050学习的一些总结之三MPU6050程序解读
  5. ZooKeeper客户端源码(三)——Watcher注册与通知
  6. 计算机磁盘序列号是唯一的吗,磁盘id和硬盘序列号一样吗
  7. 联想服务器屏不显示图标,进入系统时经常出现只显示背景不显示桌面图标怎么办...
  8. Flutter教程之Flutter 中的磨砂玻璃效果
  9. 显卡vbios修改显示接口
  10. SEO优化推广的特点