HTML5 拖拽 & fabric 插件
### 拖拽
//html
<div ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<img id="id" draggable="true" ondragstart="drag(event)" src="1.jpg">
//js
function allowDrop(ev)
{
//调用 preventDefault() 来避免浏览器对数据的默认处理
(drop 事件的默认行为是以链接形式打开)
ev.preventDefault();
}
function drag(ev)
{
//img 对象的ID属性
ev.dataTransfer.setData("Text",ev.target.id);
}
//放
function drop(ev) {
var id = ev.dataTransfer.getData("Text");
ev.preventDefault();
}
### fabric
> 导入JS,地址 https://github.com/kangax/fabric.js
官方资料:http://fabricjs.com/
创建canvas, `<canvas id="C" ></canvas>`
获取:` var canvas = new fabric.Canvas('C');`
* 添加背景:
fabric.Image.fromURL('bg_03.png', function(img) {
canvas.backgroundImage = img;
canvas.backgroundImage.width = 600;
canvas.backgroundImage.height = 600;
canvas.add(img).renderAll();
});
* 添加图片,不能跨域
fabric.Image.fromURL('10db473f-8cc3-4c61-b6b0-cea3eabafed8.jpg',function (img){
img.scale(0.3);//缩放比例
var top = clientY - (img.currentHeight/2); //设置位置
var left = clientX - (img.currentWidth/2);
img.set({top:top, left:left,borderColor: 'gray', cornerColor: '#000',});
/*img.filters.push(
new fabric.Image.filters.RemoveWhite({threshold: 60, distance: 60})
);
img.applyFilters(canvas.renderAll.bind(canvas));*/
//添加到画布
canvas.add(img);
//设置为当前选中
canvas.setActiveObject(img);
})
// 绘制在画布上
canvas..renderAll();
* 去白底过滤器
//获取当前选中对象,
var act_obj = canvas.getActiveObject();
//设置里面的filters属性
act_obj.filters.push(
new fabric.Image.filters.RemoveWhite({threshold: 60, distance: 60})
);
$("#remove-white").click(function (){
applyFilter(1, this.checked && new fabric.Image.filters.RemoveWhite({
threshold: 60,
distance: 60
}));
})
* 点击canvas对象事件
canvas.on({
//选中
'object:selected': function() {
},
//失去焦点
'selection:cleared': function() {
}
});
* 添加过滤器,并将图像对象绑定到画布
function applyFilter(index, filter) {
var obj = canvas.getActiveObject();
obj.filters[index] = filter;
obj.applyFilters(canvas.renderAll.bind(canvas));
}
* 删除
ca = canvas.getActiveObject();
canvas.remove(ca);
canvas.renderAll();
* 裁剪
//获取当前选中对象
var act_obj = canvas.getActiveObject();
//定位信息
var act_width = act_obj.currentWidth;
var act_height = act_obj.currentHeight;
var act_left = act_obj.left;
var act_top = act_obj.top;
var cur_img = act_obj._element.currentSrc;
var image_name = act_obj._element.currentSrc;
//加入到裁剪框
$(".img_box_clip_div").html('');
var html = '<img id="cropTestImg" width="'+ act_width +'" height="'+act_height+'" src="'+ image_name + '" />';
$(".img_box_clip_div").append(html);
//调用裁剪功能
var oImg = document.getElementById("cropTestImg");
var oEndBtn = document.getElementById("cropEndBtn");
fnImageCropRot(oImg);
//复制一份
var copy_obj = fabric.util.object.clone(act_obj);
//等比例放置
copy_obj.scale(1).set({
left: act_left,
top: act_top,
width:act_width,
height:act_height,
//裁剪,原位置在中心,要定位在左上
clipTo: function (ctx) {
ctx.rect(-(act_width/2)+parseInt(x),-(act_height/2)+parseInt(y),w,h);
}
});
* 图片导出及发布
原理:通过toDataURL获取到地址,模拟一个链接并点击
//这段要通过点击事件获取,start
//获取canvas元素
var canvasElement = document.getElementById(id);
//图片类型
var MIME_TYPE = "image/png";
//转换成base64
var imgURL = canvasElement.toDataURL(MIME_TYPE);
//end
//创建一个a链接,模拟点击下载
var dlLink = document.createElement('a');
dlLink.download = fileName;
dlLink.href = imgURL;
dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');
document.body.appendChild(dlLink);
dlLink.click();
document.body.removeChild(dlLink);
//发布将解码出来的Url传到接口里
### 拖拽
//html
<div ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<img id="id" draggable="true" ondragstart="drag(event)" src="1.jpg">
//js
function allowDrop(ev)
{
//调用 preventDefault() 来避免浏览器对数据的默认处理
(drop 事件的默认行为是以链接形式打开)
ev.preventDefault();
}
function drag(ev)
{
//img 对象的ID属性
ev.dataTransfer.setData("Text",ev.target.id);
}
//放
function drop(ev) {
var id = ev.dataTransfer.getData("Text");
ev.preventDefault();
}
### fabric
> 导入JS,地址 https://github.com/kangax/fabric.js
官方资料:http://fabricjs.com/
创建canvas, `<canvas id="C" ></canvas>`
获取:` var canvas = new fabric.Canvas('C');`
* 添加背景:
fabric.Image.fromURL('bg_03.png', function(img) {
canvas.backgroundImage = img;
canvas.backgroundImage.width = 600;
canvas.backgroundImage.height = 600;
canvas.add(img).renderAll();
});
* 添加图片,不能跨域
fabric.Image.fromURL('10db473f-8cc3-4c61-b6b0-cea3eabafed8.jpg',function (img){
img.scale(0.3);//缩放比例
var top = clientY - (img.currentHeight/2); //设置位置
var left = clientX - (img.currentWidth/2);
img.set({top:top, left:left,borderColor: 'gray', cornerColor: '#000',});
/*img.filters.push(
new fabric.Image.filters.RemoveWhite({threshold: 60, distance: 60})
);
img.applyFilters(canvas.renderAll.bind(canvas));*/
//添加到画布
canvas.add(img);
//设置为当前选中
canvas.setActiveObject(img);
})
// 绘制在画布上
canvas..renderAll();
* 去白底过滤器
//获取当前选中对象,
var act_obj = canvas.getActiveObject();
//设置里面的filters属性
act_obj.filters.push(
new fabric.Image.filters.RemoveWhite({threshold: 60, distance: 60})
);
$("#remove-white").click(function (){
applyFilter(1, this.checked && new fabric.Image.filters.RemoveWhite({
threshold: 60,
distance: 60
}));
})
* 点击canvas对象事件
canvas.on({
//选中
'object:selected': function() {
},
//失去焦点
'selection:cleared': function() {
}
});
* 添加过滤器,并将图像对象绑定到画布
function applyFilter(index, filter) {
var obj = canvas.getActiveObject();
obj.filters[index] = filter;
obj.applyFilters(canvas.renderAll.bind(canvas));
}
* 删除
ca = canvas.getActiveObject();
canvas.remove(ca);
canvas.renderAll();
* 裁剪
//获取当前选中对象
var act_obj = canvas.getActiveObject();
//定位信息
var act_width = act_obj.currentWidth;
var act_height = act_obj.currentHeight;
var act_left = act_obj.left;
var act_top = act_obj.top;
var cur_img = act_obj._element.currentSrc;
var image_name = act_obj._element.currentSrc;
//加入到裁剪框
$(".img_box_clip_div").html('');
var html = '<img id="cropTestImg" width="'+ act_width +'" height="'+act_height+'" src="'+ image_name + '" />';
$(".img_box_clip_div").append(html);
//调用裁剪功能
var oImg = document.getElementById("cropTestImg");
var oEndBtn = document.getElementById("cropEndBtn");
fnImageCropRot(oImg);
//复制一份
var copy_obj = fabric.util.object.clone(act_obj);
//等比例放置
copy_obj.scale(1).set({
left: act_left,
top: act_top,
width:act_width,
height:act_height,
//裁剪,原位置在中心,要定位在左上
clipTo: function (ctx) {
ctx.rect(-(act_width/2)+parseInt(x),-(act_height/2)+parseInt(y),w,h);
}
});
* 图片导出及发布
原理:通过toDataURL获取到地址,模拟一个链接并点击
//这段要通过点击事件获取,start
//获取canvas元素
var canvasElement = document.getElementById(id);
//图片类型
var MIME_TYPE = "image/png";
//转换成base64
var imgURL = canvasElement.toDataURL(MIME_TYPE);
//end
//创建一个a链接,模拟点击下载
var dlLink = document.createElement('a');
dlLink.download = fileName;
dlLink.href = imgURL;
dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');
document.body.appendChild(dlLink);
dlLink.click();
document.body.removeChild(dlLink);
//发布将解码出来的Url传到接口里
HTML5 拖拽 & fabric 插件的更多相关文章
- Html5拖拽复制
拖拽是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖拽是标准的一部分,任何元素都能够拖拽. Html5拖拽非常常见的一个功能,但是大部分拖拽的案例都是一个剪切的过程, 项目中需 ...
- html5拖拽
html5拖拽一 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- HTML5 拖拽复制功能的实现方法
Internet Explorer 9FirefoxOpera 12ChromeSafari 5 v1.0代码部分 <!DOCTYPE html><html><head& ...
- 11个好用的jQuery拖拽拖放插件
这次我们整理一些拖拽播放类型的jQuery插件,这些可能不是很常用,但偶尔会有网站设计项目用到,特别是后台相关的开发项目,这个拖放排序功能一般都会有,所以适合大家收藏起来,方便日后使用.接下来一起看盾 ...
- 每天一个JavaScript实例-html5拖拽
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- HTML5拖拽功能中 dataTransfer对象详解
有了HTML5,老板再也不用担心我们的上传了,再加上有拖拽上传是不是很酷.百度一下,有关HTML5拖拽上传的文章和实例不少,都缺不了一个至关重要的东东DataTransfer.但是详细介绍的不多,尤其 ...
- 基于html5拖拽api实现列表的拖拽排序
基于html5拖拽api实现列表的拖拽排序 html代码: <ul ondrop="drop_handler(event);" ondragover="dragov ...
- HTML5 拖拽实现
简介: 最早在网页中引入JavaScript拖放功能是IE4.当时,网页中只有两种对象可以拖放:图像和某些文本.拖放图像时,把鼠标放到图像上,按住鼠标不放就可以拖放它.拖放文本时,要先选中文本,然后可 ...
- html5拖拽事件 xhr2 实现文件上传 含进度条
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- Linux process state codes
Here are the different values that the s, stat and state output specifiers (header "STAT" ...
- PyH : python生成html
参考:Python PyH模块中文文档 1. 使用自己的css或者js文件. 写好自己的css以及js文件,比如mystyle.css.myjs.js. from pyh import * page ...
- Apache服务器部署多个进程
本文以xampp安装的apache服务为例进行介绍 1.复制配置文件目录,复制一个新的配置文件目录conf2,区别于原来的配置文件目录conf
- Linq to sql语法
LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...
- ListView 分类: WinForm 2014-07-18 22:03 289人阅读 评论(0) 收藏
一.ListView类(转载) 1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLin ...
- jQuery 实现上下,左右滑动
前几天的任务:http://t.sina.com.cn/ 的下滑效果. 渐变移动出足够的空白 -> 淡出最后一个 ->渐变移动出足够的空白 我们要做的是向左移动效果.这个效果用时需添加一 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(46)-工作流设计-设计分支
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(46)-工作流设计-设计分支 系列目录 步骤设置完毕之后,就要设置好流转了,比如财务申请大于50000元( ...
- cocos2d-x创建精灵动画
创建动画一般过程: 1.创建精灵框架缓存,并向其中添加相应的动画文件(plist),最后,通过动画集缓存生产动画 CCSpriteFrameCache *cache = CCSpriteFrameCa ...
- POJ3723 Conscription
http://poj.org/problem?id=3723 这题虽然简单,但是还是错了很多次. 因为这题构建的图可能是不连通的.也就是说可能有很多棵树. 所以我以前写的并查集用在这上面会出问题的. ...
- SpringMVC + Spring 3.2.14 + Hibernate 3.6.10 集成详解
注:此文档只说明简单的框架集成,各个框架的高级特性未涉及,刚刚接触框架的新人可能需要参考其他资料. PS:本次练习所用jar包都能在此下载到:http://pan.baidu.com/s/1sjmgd ...