js小学生图区_js 图片区域可点击,适配移动端,图片大小随意改变
实现图片区域可点击,实际上使用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 图片区域可点击,适配移动端,图片大小随意改变相关推荐
- js小学生图区_js实现图片区域可点击大小随意改变(适用移动端)代码实例
实现图片区域可点击,实际上使用map是可以的,但是适配效果并不好,图片只能是固定大小的值,而且点都被写死了. 在这里,我使用的js基于canvas写的一个小工具.可以圈出你需要点击的部分,然后生成一串 ...
- js小学生图区_js读取本地图片并显示
版权声明:本文为博主原创文章,未经博主允许不得转载. 根据项目需要,需要选择本地图片并显示在页面上,然后上传至服务器.因为自身刚刚接触js,所以比较生疏,碰到问题吼,幸好有强大的网络,搜索很多有用的资 ...
- js小学生图区_推荐12个最好的 JavaScript 图形绘制库
众多周知,图形和图表要比文本更具表现力和说服力.图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等.可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和 Web ...
- js小学生图区_多种方式实现js图片预览
js多种方式图片预览-持续更新 //设置自己的变量存储区 var Util = { file : $("#file"), image_show:$("#img_show& ...
- 如何用js实现点击图片切换为另一图片,再次点击恢复到原图片
如何用js实现点击图片切换为另一图片,再次点击恢复到原图片 <!DOCTYPE html> <html lang="en"> <head>< ...
- js实现绑定多个按钮并当点击某个按钮时改按钮颜色改变
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- python图像处理——图片区域颜色替换小工具
python图像处理--图片区域颜色替换小工具 使用场景 图片区域颜色替换小工具使用python开发,可用于选取图片相同颜色的区域,可设定选择精度,可自由选择颜色,将区域的颜色进行替换.可使用橡皮擦工 ...
- 在html中怎么插入动态图片,如何在gif中插入图片 动态图片某1帧插入图片并控制显示时间|动态图片中插入图片...
大家还记得我以前的一个教程嘛?就是如何在视频中插入图片并控制其显示时间,有印象的话就太棒了,没印象的或就点击上边的文字自己做一下功课吧!! 今天的教程内容和上边所讲到的教程有点相似,都是插入图片,但是 ...
- Java通过JfreeChart生成转Base64图片字符串(饼图、折线图、柱状图、折线图-多条、3D柱状图、气泡图、时序图、曲线图、区域图、分布图、联合分类图、双X轴图、K线图、柱状图-横向等图)
工具类 CreatLineChart.java package DrawLine;import java.awt.BasicStroke; import java.awt.Color; import ...
最新文章
- 电子计算机发展迅,ENIAC问世以来的短短的四十多年中,电子计算机的发展异常迅速...
- 什么限制了GNN的能力?首篇探究GNN普适性与局限性的论文出炉
- 大神总结的80个Python练手项目列表
- Java学习笔记十(注解)
- libvirt(virsh命令介绍)
- codeforces 269B Greenhouse Effect
- 从Chrome源码看audio/video流媒体实现二
- pulse 去马赛克软件_细致到毛孔头发 神还原的高清大图!AI去马赛克新算法
- import pandas as pd什么意思_【医学名词】多发性骨髓瘤MR、SD、PD分别是什么意思?...
- 会声会影2022美颜功能介绍 教你玩转视频美颜
- Python地理数据处理相关模块的安装方法
- DHT爬虫和使用BEP协议完成metadata的下载(BT下载)
- Linux从图形界面切换到文本界面快捷键不好用的解决方法
- SSE(Server-Sent Events)| 前后端demo参考
- 面试算法———回溯经典题目
- Word利用Aurora插入伪代码
- Windows pytorch编译安装SoftPool
- 数据库建模工具UML
- 无人机在海洋行业中的应用
- 系统MTU值的更改方法
热门文章
- Oracle 中select XX_id_seq.nextval from dual 什么意思呢?
- user-select的详细用法
- 阿里云服务器以及CDN支持IPV6的方法
- 关于MPU6050学习的一些总结之三MPU6050程序解读
- ZooKeeper客户端源码(三)——Watcher注册与通知
- 计算机磁盘序列号是唯一的吗,磁盘id和硬盘序列号一样吗
- 联想服务器屏不显示图标,进入系统时经常出现只显示背景不显示桌面图标怎么办...
- Flutter教程之Flutter 中的磨砂玻璃效果
- 显卡vbios修改显示接口
- SEO优化推广的特点