html5可视化编辑器2
来源:互联网 发布:奇爱博士 知乎 编辑:程序博客网 时间:2024/06/06 01:49
今天接着写,昨天有了舞台,场景,层,今天要加一个重要的东西Player!还记得flash当时有个东西叫movieClip的东西吧,或者是splite,这个东西是个容器,装着我们的动画,图片,还有梦想!不说了上菜!
function player(role) { if (role == "img") { var img = new Object(); img.role = role; img.image = new Image(); img.id = ''; img.x = 0; img.y = 0; img.w = 50; img.h = 50; img.testx=0; img.testy=0; img.inthis=false; img.rotate = 0; img.alphatx = 100; img.shadow = new shadow(); img.editflag = false; img.focus = false; img.visible = true; img.editflag = false; img.edit = function () { } img.mouseup = function (e) { } img.mousedown = function (e) { } img.mousemove=function(e){ } img.mouseIn=function(e){ } img.mouseOut=function(e){ } return img; } if (role == "rect") { var jx = new Object(); jx.role = role; jx.id = ''; jx.x = 0; jx.y = 0; jx.w = 0; jx.h = 0; jx.editflag = false; jx.visible = true; jx.rotate = 0; jx.color = "pink"; jx.xw = 2; jx.mousemove=function(e){ } jx.mouseup = function (e) { } jx.mousedown = function (e) { } jx.mouseIn=function(e){ } jx.mouseOut=function(e){ } return jx; } if (role == "rects") { var jxs = new Object(); jxs.role = role; jxs.id = ''; jxs.x = 0; jxs.y = 0; jxs.w = 0; jxs.h = 0; jxs.color = "pink"; return jxs; } if (role == "line") { var lin = new Object(); lin.role = role; lin.id = ''; lin.x = 0; lin.y = 0; lin.x1 = 0; lin.y1 = 0; lin.color = "pink"; lin.xw = 2; return lin; } if (role == "crl") { var crl = new Object(); crl.role = role; crl.id = ''; crl.x = 0; crl.y = 0; crl.r = 10; crl.sd = 0; crl.ed = 40; crl.sz = true; crl.xw = 2; crl.color = "pink"; return crl; } if (role == "crls") { var crls = new Object(); crls.role = role; crls.id = ''; crls.x = 0; crls.y = 0; crls.r = 10; crls.sd = 0; crls.ed = 40; crls.sz = true;//时钟旋转顺序 crls.color = "pink"; return crls; } if (role == "word") { var word = new Object(); word.role = role; word.id = ""; word.str = "hello Test word!" word.x = 0; word.y = 0; word.alg = "center"; word.color = "pink"; word.kind = "serif"; word.size = 38; return word; } if(role=="pickj"){ var pic=new Object(); pic.role=role; pic.x=0; pic.y=0; pic.canId=""; pic.targetId=""; pic.id=""; pic.img=new Image(); pic.shadow=new shadow(); pic.h=100; pic.w=100; pic.depth=1; pic.rotate=0; pic.editflag=false; pic.tmd=100; pic.mousemove=function(e){ } pic.mouseup = function (e) { } pic.mousedown = function (e) { } pic.mouseIn=function(e){ } pic.mouseOut=function(e){ } return pic; } if(role=="weather"){ var weath=new Object(); weath.role=role; weath.x=0; weath.y=0; weath.canId=""; weath.targetId=""; weath.id=""; weath.h=100; weath.w=100; weath.depth=1; weath.editflag=false; weath.mousemove=function(e){ } weath.mouseup = function (e) { } weath.mousedown = function (e) { e.preventDefault(); } weath.mouseIn=function(e){ } weath.mouseOut=function(e){ } return weath; }}
好长!不过还没有完,除了img外其他的还不是太完善,暂时先这样吧,这个player就是一个图形容器比如说舞台上需要两个图片,球,饼。。。。等player都要满足它,所以player是个超级对象 superobject,所以他的功能再多也不过分,所以以后我会将它继续完善。
接下来我们要把这些舞台,场景 player等等这些东西串起来,让他们活起来发挥他们的作用!
核心的东西来了,且看下面
function DrawMain() { if (scaneArray.length > 0) { for (var i = 0; i < scaneArray.length; i++) { if (scaneArray[i].playflag == true && scaneArray[i].loopflag == false) { scaneArray[i].playtime += -1; //---------------------------------------播放指定时间长--------------------------------------------------------- if (scaneArray[i].playtime <= 0) {//---------------------------------------------跳入指定的场景根据其场景编号-------------------------------------------------------- if (scaneArray[i].nextframe != "" && scaneArray[i].nextframe != null) { for (var p = 0; p < scaneArray.length; p++) { if (scaneArray[p].order == scaneArray[i].nextframe) { scaneArray[p].playflag = true; scaneArray[i].playflag = false; break; } } } scaneArray[i].playflag = false; } if (scaneArray[i].layer.array.length > 0) { var k; for (var j = 0; j < scaneArray[i].layer.array.length; j++) { k = scaneArray[i].layer.array[j]; //----------------------------------------绘制图片---------------------------------- if (k.role == "img") { if (k.rotate == 0) { paint.globalAlpha = k.alphatx / 100; if (k.shadow.color != "" && k.shadow.color != null) { paint.shadowColor = k.shadow.color; paint.shadowBlur = k.shadow.blur; paint.shadowOffsetX = k.shadow.offsetX; paint.shadowOffsetY = k.shadow.offsetY; } paint.drawImage(k.image, k.x, k.y, k.w, k.h); console.log(k.x); if(k.editflag){ DrawTools(canvas, "rect", 3, "red", new Array(k.x, k.y, k.w-1, k.h-1)); } } else { k.image.width = k.w; k.image.height = k.h; rotatepic(k.image, k.x, k.y, k.rotate, k.alphatx * 0.01); console.log(k.x); if(k.editflag){ DrawTools(canvas, "rect", 3, "red", new Array(k.x, k.y, k.w-1, k.h-1)); } } }else if (k.role == "rect") { if (k.rotate == 0) { DrawRect(k.x, k.y, k.w, k.h, k.color, k.xw); } else { rotateRect(k.x, k.y, k.w, k.h, k.xw, k.color, k.rotate); } } else if(k.role=="pickj"){ if($s(k.canId)==null){ var newc=document.createElement("canvas"); newc.id= k.canId; ///style="text-align:center;position:absolute;z-index:2;left: 200px;top: 130px;width: 180;height: 400;" newc.style.position="absolute"; newc.style.zIndex=2; newc.style.left= k.x+"px"; newc.style.top= k.y+"px"; newc.width= k.w; newc.height= k.h; newc.addEventListener("mousedown",function(){ k.mousedown(this); }); newc.addEventListener("mouseup",function(){ k.mouseup(this); }); newc.addEventListener("mousemove",function(){ k.mousemove(this); }); $s(k.targetId).appendChild(newc); } $s(k.canId).style.left= k.x+"px"; $s(k.canId).style.top= k.y+"px"; k.img.width= k.w; k.img.height= k.h; k.depth=scaneArray[i].layer.array.find(k)+2; if(k.editflag){ $s(k.canId).style.backgroundColor="blue"; DrawTools(k.canId, "rect", 2, "red", new Array(0, 0, k.w, k.h)); }else{ $s(k.canId).style.backgroundColor=""; } $s(k.canId).style.zIndex= k.depth; DrawTools( k.canId,"clear", 1, "red", new Array(0,0, k.w, k.h)); DrawTools(k.canId,"pic", 1, "red", new Array(k.img, k.rotate, k.tmd)); } else if(k.role=="weather"){ if($s(k.id)==null){ var newc=document.createElement("iframe"); newc.id= k.id; newc.name="weather_inc"; newc.src="http://i.tianqi.com/index.php?c=code&id=4"; newc.style.position="absolute"; newc.frameborder=0; newc.marginwidth=0; newc.marginHeight=0; newc.style.zIndex=2; newc.style.left= k.x+"px"; newc.style.top= k.y+"px"; newc.width= 130; newc.height=120; $s("stage").appendChild(newc); } $s(k.id).style.left= k.x+"px"; $s(k.id).style.top= k.y+"px"; } else if(k.role=="wordkj"){ } else if(k.role=="videokj"){ } else if(k.role=="audiokj"){ } else if(k.role=="timekj"){ } else if(k.role=="gpkj"){ } else if(k.role=="bdkj"){ } else if(k.role=="jhkj"){ } else if(k.role=="txkj"){ } } } break;//-----------------------------------------------------------循环场景播放---------------------------------------------------------------------------------- } else if (scaneArray[i].playflag == true && scaneArray[i].loopflag == true) { if (scaneArray[i].layer.array.length > 0) { var k; for (var j = 0; j < scaneArray[i].layer.array.length; j++) { k = scaneArray[i].layer.array[j];//------------------------------------绘制图片------------------------------------------------------------------------------------------ if (k.role == "img") { if (k.rotate == 0) { if (k.shadow.color != "" && k.shadow.color != null) { paint.shadowColor = k.shadow.color; paint.shadowBlur = k.shadow.blur; paint.shadowOffsetX = k.shadow.offsetX; paint.shadowOffsetY = k.shadow.offsetY; } paint.globalAlpha = k.alphatx / 100; paint.drawImage(k.image, k.x, k.y, k.w, k.h); // console.log(k.x); if(k.editflag){ DrawTools(canvas, "rect", 3, "red", new Array(k.x, k.y, k.w-1, k.h-1)); } } else { k.image.width = k.w; k.image.height = k.h; if (k.shadow.color != "" && k.shadow.color != null) { paint.shadowColor = k.shadow.color; paint.shadowBlur = k.shadow.blur; paint.shadowOffsetX = k.shadow.offsetX; paint.shadowOffsetY = k.shadow.offsetY; } paint.globalAlpha = k.alphatx / 100; rotatepic(k.image, k.x, k.y, k.rotate, k.alphatx * 0.01); if(k.editflag){ Draw.rect(canvas,3,"green", k.rotate,new point(k.x, k.y),new point(k.w, k.h), k.testx, k.testy); } } } else if (k.role == "rect") { if (k.rotate == 0) { DrawRect(k.x, k.y, k.w, k.h, k.color, k.xw); } else { rotateRect(k.x, k.y, k.w, k.h, k.xw, k.color, k.rotate); }//----------------------------------------------------图片控件---------------------------------------------------- }else if(k.role=="pickj"){ if($s(k.canId)==null){ var newc=document.createElement("canvas"); newc.id= k.canId; ///style="text-align:center;position:absolute;z-index:2;left: 200px;top: 130px;width: 180;height: 400;" newc.style.position="absolute"; newc.style.zIndex=1; newc.style.left= k.x+"px"; newc.style.top= k.y+"px"; newc.width= k.w; newc.height= k.h; $s(k.targetId).appendChild(newc); newc.addEventListener("mousedown",function(){ k.mousedown(this); }); newc.addEventListener("mouseup",function(){ k.mouseup(this); }); newc.addEventListener("mousemove",function(){ k.mousemove(this); }); } $s(k.canId).style.left= k.x+"px"; $s(k.canId).style.top= k.y+"px"; k.img.width= k.w; k.img.height= k.h; k.depth=scaneArray[i].layer.array.find(k)+2; $s(k.canId).style.zIndex= k.depth; DrawTools( k.canId,"clear", 1, "red", new Array(0,0, k.w, k.h)); DrawTools(k.canId,"pic", 1, "red", new Array(k.img, k.rotate, k.tmd)); if(k.editflag){ // $s(k.canId).style.backgroundColor="blue"; DrawTools(k.canId, "rect", 2, "red", new Array(0, 0, $s(k.canId).width, $s(k.canId).height)); }else{ $s(k.canId).style.backgroundColor=""; } } else if(k.role=="wordkj"){ } else if(k.role=="weather"){ if($s(k.id)==null){ var newc=document.createElement("iframe"); newc.id= k.id; newc.name="weather_inc"; newc.src="http://i.tianqi.com/index.php?c=code&id=4"; ///style="text-align:center;position:absolute;z-index:2;left: 200px;top: 130px;width: 180;height: 400;" // <iframe name="weather_inc" src="http://i.tianqi.com/index.php?c=code&id=4" width="130" height="120" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> newc.style.position="absolute"; newc.frameborder=0; newc.marginwidth=0; newc.marginHeight=0; newc.style.border="0"; newc.style.zIndex=2; newc.style.left= k.x+"px"; newc.style.top= k.y+"px"; newc.width= 130; newc.height=120; newc.scrolling="no"; newc.addEventListener("mousedown",function(){ k.mousedown(this); }); newc.addEventListener("mouseup",function(){ k.mouseup(this); }); newc.addEventListener("mousemove",function(){ k.mousemove(this); }); $s("stage").appendChild(newc); } $s(k.id).style.left= k.x+"px"; $s(k.id).style.top= k.y+"px"; } else if(k.role=="wordkj"){ } else if(k.role=="videokj"){ } else if(k.role=="audiokj"){ } else if(k.role=="weatherkj"){ } else if(k.role=="timekj"){ } else if(k.role=="gpkj"){ } else if(k.role=="bdkj"){ } else if(k.role=="jhkj"){ } else if(k.role=="txkj"){ } } } break; } } }}
看完想吐不?反正我是吐了,为了实现功能垒成的东西,1.000版本,太臃肿了,不过透过它能知道前进方向,待会会上一个精干的代码1.2。 哈哈1.1看完我又吐了,所以直接否决了!
在上之前说一下一个canvas 基本动画的结构
1 获取或是创建一个canvas 画布对象 var canvas=document.getelementById("canvas");
2 canvas也只是个图形容器(可以容纳 基本图形,视频(把电影画上去),还有其他canvas(画中画)),但他的Context封装了绘画操作
所以我们的获取这些绘图操作,var paint=canvas.getContext("2d");(暂时没有3d,想要的话可以用webGl或者是Three.js框架(很牛的框架))
3设置一个定时渲染或者是定时更新的东西,因为你要的是一副动画或者是一个互动游戏,不仅仅是一副画。我们有两个选择一个是setInterval 或者是 requestAnimationFrame
前者是定时执行的但是需要自己实现双缓冲,(所谓实现双缓冲,就是不让画面看着闪烁,看着比较自然)。后者是一个html5只带的实现了双缓冲的家伙,效果比较好,如果你想调节帧数(更新画面的速度)也可以自己设置。
下面给大家看一下
window.onload=function() { var can = document.getElementById("canvas"); window.requestAnimFrame = (function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) { window.setTimeout(callback, 1000/60); }; })(); function draw() { var paint = can.getContext("2d"); paint.clearRect(0, 0, can.width, can.height); game(); } function render() { draw(); window.requestAnimFrame(render); } render();}
下面是简单写法
window.onload=function() { var can = document.getElementById("canvas"); function draw() { var paint = can.getContext("2d"); paint.clearRect(0, 0, can.width, can.height); //drawing........................... } function render() { draw(); requestAnimationFrame(render); } render();}
draw()中执行的就是具体的绘图操作。
下面上我们1.2版本的
/** * * 主绘图程序 * @constructor */function DrawMain() { if (scaneArray.length > 0) { for (var i = 0; i < scaneArray.length; i++) { if (scaneArray[i].playflag) { scaneArray[i].playtime += -1; //当循环播放开始的时候循环事件会自动增加 if (scaneArray[i].loopflag) { if (scaneArray[i].playtime <= 2) { scaneArray[i].playtime = 500; } } //-------------播放指定时间长--------------------------------------------------------- if (scaneArray[i].playtime <= 0) { //--------------跳入指定的场景根据其场景编号-------------------------------------------------------- if (scaneArray[i].nextframe != "" && scaneArray[i].nextframe != null) { for (var p = 0; p < scaneArray.length; p++) { if (scaneArray[p].frame == scaneArray[i].nextframe) { scaneArray[p].playflag = true; scaneArray[p].playtime = 500; scaneArray[i].playflag = false; break; } } } scaneArray[i].playflag = false; } if (scaneArray[i].layer.array.length > 0) { var k; for (var j = 0; j < scaneArray[i].layer.array.length; j++) { k = scaneArray[i].layer.array[j]; //----------------------------------------绘制图片---------------------------------- if (k.role == "img") { k.img.width = k.w; k.img.height = k.h; Draw.img(canvas, k.img, k.x, k.y, k.rotate); if(k.edit&&Draw.path(canvas, k.x, k.y, k.w, k.h, k.rotate, 5,2,"blue", k.hitx,k.hity)==true){ k.editflag=true; }else{ k.editflag=false; } if(k.ckg){ Draw.rect(canvas, 1, "red", k.rotate, new point(k.x, k.y), new point(k.w, k.h)); } } else if (k.role == "rect") { Draw.rect(canvas, 4, "pink", k.rotate, new point(k.x, k.y), new point(k.w, k.h)); } } } break; } } }}
今天先写到这了。明天见!
- html5可视化编辑器2
- html5可视化图形编辑器(基于canvas)
- python可视化编辑器Sublime Text 2
- Html可视化编辑器
- 可视化HTML编辑器 KindEditor
- 可视化HTML编辑器 CKEditor
- 在线可视化HTML编辑器
- CKEditor 可视化HTML编辑器
- 可视化html编辑器
- xhEditor页面可视化编辑器.....
- iTween_itween可视化编辑器(1)
- 可视化编辑器-bootstrap-wysiwyg
- 关闭jsp可视化编辑器
- Bootstrap 可视化编辑器summernote
- 页面可视化编辑器设计
- xml可视化编辑器
- xml可视化编辑器
- xml可视化编辑器
- 破解防盗链的图片的一些方法总结
- kylin1.15.4.1 /usr/local/hadoop-2.6.0/contrib/capacity-scheduler/*.jar
- 前端检查上传图片的格式,大小,分辨率
- ActionContextCleanUp作用
- CodeForcse 445A DZY Loves Chessboard
- html5可视化编辑器2
- js 面向对象的特点
- 利用 xrandr 命令修改屏幕分辨率
- 请保持心情快乐,请保持情绪稳定
- 本人介绍
- 手机多媒体--调用摄像头
- React Native常用组件Image使用
- 中小企业监控体系构建实战--案例分享(内附传送门)
- 【C++心路历程14】1177状态数组 查找(比binary好用多了)