html5 自动连线,基于html5二个div 连线

HTML>

body {

margin: 0px;

padding: 0px;

}

canvas {

border: 1px solid #9C9898;

}

Ext.onReady(function(){

/**

自动判断顶点连线算法

*/

var stage=new Kinetic.Stage({

container:‘container‘,

width:1000,

height:1000

});

var layer=new Kinetic.Layer();

var flag=false;

var imgArray=[];

var lineArray=[];

var tmpMoveImg=null;

var loop=0;

function  Pos(x,y){

this.x=x;

this.y=y;

};

function LineImage(img,line){

this.img=img;

this.line=line;

};

function NewImage(img,opsArray){

this.img=img;

this.opsArray=opsArray;

};

var imgA= new Image();

imgA.οnlοad=function(){

var imgObjA= createImage(imgA,100,100,100,100)

var array=new Array();

var na=new  NewImage(imgObjA,array);

imgArray.push(na);

layer.add(imgObjA);

stage.add(layer);

}

var imgB= new Image();

imgB.οnlοad=function(){

var imgObjB= createImage(imgB,400,400,100,100)

var array=new Array();

var nb=new  NewImage(imgObjB,array);

imgArray.push(nb);

layer.add(imgObjB);

stage.add(layer);

}

var imgC= new Image();

imgC.οnlοad=function(){

var imgObjC= createImage(imgC,700,100,100,100)

var array=new Array();

var nc=new  NewImage(imgObjC,array);

imgArray.push(nc);

layer.add(imgObjC);

stage.add(layer);

}

var rect=new Kinetic.Rect({

x:0,

y:0,

width:1000,

height:1000,

fill:‘white‘,

storke:‘red‘,

storkeWidth:5

});

layer.add(rect);

imgA.src=‘img/db.png‘;

imgB.src=‘img/mj.png‘;

imgC.src="img/kt1.png";

rect.on(‘dblclick‘,function(){

if(loop%2==0){

flag=true;

for(var i=0;i

imgArray[i].img.setDraggable(false);

}

}else{

flag=false;

for(var i=0;i

imgArray[i].img.setDraggable(true);

imgArray[i].img.on(‘mouseover‘,function(){

var p=new Pos(this.getX(),this.getY());

tmpMoveImg=getImgByPos(p);

})

imgArray[i].img.on(‘dragmove‘,function(){

for(var j=0;j

var realPoints=[];

calculateStartEndPos(tmpMoveImg.opsArray[j].img,this,realPoints);

var line= createLine(realPoints);

var oldLine=tmpMoveImg.opsArray[j].line;

var p=new Pos(tmpMoveImg.opsArray[j].img.getX(),tmpMoveImg.opsArray[j].img.getY());

var oppoImg= getImgByPos(p);

replaceOppoLine(oppoImg,oldLine,line);

layer.remove(tmpMoveImg.opsArray[j].line);

tmpMoveImg.opsArray[j].line=line;

layer.add(line);

layer.draw();

realPoints=[];

}

layer.draw();

})

}

}

loop++;

for(var i=0;i

var innerFlag=false;

var points=[];//标记性的点,为了获取img 使用

var realPoints=[];//真正计算后合理的划线点

imgArray[i].img.on(‘mousedown‘,function(){

if(flag){

var pos= stage.getMousePosition();

points.push(this.getX());

points.push(this.getY());

innerFlag=true;

}

});

imgArray[i].img.on(‘mouseup‘,function(){

if(flag&&innerFlag){

var pos= stage.getMousePosition();

points.push(this.getX());

points.push(this.getY());

var p=new Pos(points[0],points[1]);

var op=new Pos(points[2],points[3]);

var opImg=getImgByPos(p);

var owImg=getImgByPos(op);

if(opImg!=owImg){

calculateStartEndPos(opImg.img,owImg.img,realPoints);

var line= createLine(realPoints);

var opLine=new LineImage(opImg.img,line);

var owLine=new LineImage(owImg.img,line);

owImg.opsArray.push(opLine);

opImg.opsArray.push(owLine);

flag=false;

innerFlag=false;

points=[];

realPoints=[];

layer.add(line);

layer.draw();

}

}

});

}

})

/**

* 通过坐标获取Img对象

*/

function getImgByPos(pos){

for(var i=0;i

if(imgArray[i].img.getX()==pos.x&&imgArray[i].img.getY()==pos.y){

return imgArray[i];

}

}

}

/**

* 替换对方中line

*/

function replaceOppoLine(imgObj,oldLine,newLine){

for(var i=0;i

if(imgObj.opsArray[i].line==oldLine){

imgObj.opsArray[i].line=newLine;

}

}

}

/**

划线

*/

function createLine(points){

var line=new Kinetic.Line({

points:points,

stroke:‘bule‘,

strokeWidth:5,

lineCap:‘round‘,

lineJoin:‘round‘

});

return line;

}

/**

* 计算划线的开始坐标

*/

function calculateStartEndPos(imgStart,imgEnd,realPoints){

var realSx=0;

var realSy=0;

var realEx=0;

var realEy=0;

var sx=imgStart.getX();

var sy=imgStart.getY();

var swidth=imgStart.getWidth();

var sheight=imgStart.getHeight();

var ex=imgEnd.getX();

var ey=imgEnd.getY();

var ewidth=imgEnd.getWidth();

var eheight=imgEnd.getHeight();

var arrayx=calculateX(sx,swidth,ex,ewidth );

var arrayy=calculateY(sy,sheight,ey,eheight );

realPoints.push(arrayx[0]);

realPoints.push(arrayy[0]);

realPoints.push(arrayx[1]);

realPoints.push(arrayy[1]);

}

/**

计算开始和结束节点x坐标

*/

function calculateX(sx,swidth,ex,ewidth ){

var arrayX=[];

if(sx>ex){

arrayX.push(sx);

arrayX.push(ex+ewidth);

}else if(sx==ex){

arrayX.push(sx+(swidth/2));

arrayX.push(sx+(ewidth/2));

}else{

arrayX.push(sx+swidth);

arrayX.push(ex);

}

return  arrayX;

}

/**

计算开始和结束节点y坐标

*/

function calculateY(sy,sheight,ey,eheight ){

var arrayY=[];

if(sy>ey){

arrayY.push(sy+(sheight/2));

arrayY.push(ey+(eheight/2));

}else if(sy==ey){

arrayY.push(sy+(sheight/2));

arrayY.push(sy+(eheight/2));

}else{

arrayY.push(sy+(sheight/2));

arrayY.push(ey+(eheight/2));

}

return  arrayY;

}

/**

画图

*/

function createImage(img,x,y,width,height){

var imgObj=new Kinetic.Image({

x:x,

y:y,

width:width,

height:height,

draggable:true,

image:img

});

imgObj.on("mouseover", function(){

document.body.style.cursor = "pointer";

});

imgObj.on("mouseout", function(){

document.body.style.cursor = "default";

});

return imgObj

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值