1 Star 9 Fork 3

qq123/qcanvas

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
template25.html 18.36 KB
一键复制 编辑 原始数据 按行查看 历史
qq123 提交于 2021-07-21 22:48 . 示例更新
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery.js"></script>
<link href="style/default.min.css" rel="stylesheet">
<link rel="stylesheet" href="style/style.css">
<script src="js/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="js/initTemp.js"></script>
<style>
html,body{
padding: 0;
margin: 0;
}
canvas{
background:#eee;
background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImdyaWQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTSAwIDEwIEwgNDAgMTAgTSAxMCAwIEwgMTAgNDAgTSAwIDIwIEwgNDAgMjAgTSAyMCAwIEwgMjAgNDAgTSAwIDMwIEwgNDAgMzAgTSAzMCAwIEwgMzAgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2QwZDBkMCIgb3BhY2l0eT0iMC4yIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNIDQwIDAgTCAwIDAgMCA0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZDBkMGQwIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48L3N2Zz4=");
}
</style>
</head>
<body>
<div class="qcanvas_lay" id="qcanvas_lay">
<canvas id="qcanvas"></canvas>
<!-- <canvas id="qcanvas1"></canvas> -->
</div>
<div class="code_lay">
<pre><code class="js">
// 两个元素之间折线 可以拆解为三段直线连接起来了
/*
A---|
|
|---B
*/
var a,b,line;
window.onload = function(){
var resetHandlerPosition = function(){
var start = line2.start();
var end = line2.end();
var sign = start[1]-end[1];
var dis = Math.abs(end[1]-start[1]);
var y = sign<=0?start[1]+dis*0.8:end[1]+dis*0.2
// console.log(start[0]-end[0]);
// return [x,end[0]];
h_handler.setStart([end[0]-1,y]).setDisplay('block');
}
var qcanvas = new Qcanvas({
id:'qcanvas',
width:500,
height:500,
mouseup:function(){
resetHandlerPosition();
create_range();
},
mousemove:function(){
if(qcanvas.dragAim !== null && qcanvas.dragAim.id ==h_handler.id){
//重新计算line2的x坐标到起点的的距离点整个宽度的比例
percent = Math.abs((h_handler.start[0]-a.start[0])/(a.start[0] - b.start[0]))
}
}
});
a = qcanvas.qarc.arc({
start:[50,50],
r:10,
sAngle:0,
eAngle:360,
fillColor:'#ffff00',
borderColor:'#000',
mousedown:function(){
h_handler.setDisplay('none')
},
mouseup:function(){
resetHandlerPosition();
create_range();
}
})
b = qcanvas.qarc.arc({
start:[200,200],
r:10,
sAngle:0,
eAngle:360,
fillColor:'#c3c3c3',
borderColor:'#000',
mousedown:function(){
h_handler.setDisplay('none')
},
mouseup:function(){
resetHandlerPosition();
create_range();
}
})
var percent = 0.8;
var range = [];
var h_handler = {};
//句柄划动限制区域
var create_range = function(){
var f = function(){
//A在左 B在右
if(a.start[0] <= b.start[0]){
if(a.start[1] <= b.start[1]){
//A
// |
//h1 \ h2
//
// B
return [[a.start[0]+5,a.start[1]],[b.start[0]-5,b.start[1]]];
}else{
// B
//
//h1 / h2
// |
//A
return [[a.start[0]+5,b.start[1]],[b.start[0]-5,a.start[1]]]
}
}else{
//B在左 A在右
if(b.start[1] <= a.start[1]){
// B
//
//h1 \ h2
// |
// A
return [[b.start[0]+5,b.start[1]],[a.start[0]-5,a.start[1]]]
}else{
// A
// |
//h1 / h2
//
//B
return [[b.start[0]+5,a.start[1]],[a.start[0]-5,b.start[1]]];
}
}
}
range = f();
}
create_range();
//生成三条直线的坐标
var caleHandler1 = function(a,b){
var start = a.start;
var end = b.start;
// 竖向模式
return {
'l1':function(){return [start,[(end[0]-start[0])*percent+start[0],start[1]]]},
'l2':function(){return [[(end[0]-start[0])*percent+start[0],start[1]],[(end[0]-start[0])*percent+start[0],end[1]]]},
'l3':function(){return [[(end[0]-start[0])*percent+start[0],end[1]],end]}
}
// //A
// // |
// //h1 \ h2
// //
// // B
// //
// // A
// // |
// //h2/h1
// //
// // B
// if(start[1]<=end[1]){
// //模向模式
// // return {
// // 'l1':function(){return [start,[start[0],(end[1]-start[1])*0.5+start[1]]]},
// // 'l2':function(){return [[start[0],(end[1]-start[1])*0.5+start[1]],[end[0],(end[1]-start[1])*0.5+start[1]]]},
// // 'l3':function(){return [[end[0],(end[1]-start[1])*0.5+start[1]],end]}
// // }
// // 竖向模式
// return {
// 'l1':function(){return [start,[(end[0]-start[0])*percent+start[0],start[1]]]},
// 'l2':function(){return [[(end[0]-start[0])*percent+start[0],start[1]],[(end[0]-start[0])*percent+start[0],end[1]]]},
// 'l3':function(){return [[(end[0]-start[0])*percent+start[0],end[1]],end]}
// }
// }
// // B
// //
// //h1\h2
// // |
// // A
// //
// // B
// //
// // h2/h1
// // |
// // A
// if(start[1]>=end[1]){
// //模向模式
// // return {
// // 'l1':function(){return [start,[start[0],(start[1]-end[1])*percent+end[1]]]},
// // 'l2':function(){return [[start[0],(start[1]-end[1])*percent+end[1]],[end[0],(start[1]-end[1])*percent+end[1]]]},
// // 'l3':function(){return [[end[0],(start[1]-end[1])*percent+end[1]],end]}
// // }
// //竖向模式
// return {
// 'l1':function(){return [start,[(start[0]-end[0])*percent+end[0],start[1]]]},
// 'l2':function(){return [[(start[0]-end[0])*percent+end[0],start[1]],[(start[0]-end[0])*percent+end[0],end[1]]]},
// 'l3':function(){return [[(start[0]-end[0])*percent+end[0],end[1]],end]}
// }
// }
}
var tmp = null;
var line1 = qcanvas.qline.line({
start:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l1']();
return t[0];
},
end:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l1']();
return t[1];
},
pointerEvent:'none',
width:1,
})
var line2 = qcanvas.qline.line({
start:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l2']();
return t[0];
},
end:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l2']();
return t[1];
},
pointerEvent:'none',
width:1,
withText:'ddd',
})
var line3 = qcanvas.qline.line({
start:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l3']();
return t[0];
},
end:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l3']();
return t[1];
},
like:'->',
pointerEvent:'none',
width:1,
})
var getStart = (function(){
var start = line2.start();
var end = line2.end();
var sign = start[1]-end[1];
var dis = Math.abs(end[1]-start[1]);
var y = sign<=0?start[1]+dis*0.8:end[1]+dis*0.2
// console.log(start[0]-end[0]);
return [end[0]-1,y];
})()
h_handler = qcanvas.qtext.text({
text:'=',
color:'red',
textAlign:'center',
textBaseline:'middle',
fontSize:'26px',
start:getStart,
degree:90,
drag:'horizontal',
dragRange:function(){return range},
// mouseout:function(){
// qcanvas.dragAim =null;
// },
mousemove:function(){
if(qcanvas.dragAim !== null && qcanvas.dragAim.id ==this.id){
//重新计算line2的x坐标到起点的的距离点整个宽度的比例
percent = Math.abs((this.start[0]-a.start[0])/(a.start[0] - b.start[0]))
}
},
mouseup:function(){
resetHandlerPosition();
}
})
qcanvas.raiseToTop(h_handler);
}
</code>
</pre>
</div>
</body>
<script src='Qcanvas.js'></script>
<script>
// 两个元素之间折线 可以拆解为三段直线连接起来了
/*
A---|
|
|---B
*/
var a,b,line;
window.onload = function(){
var resetHandlerPosition = function(){
var start = line2.start();
var end = line2.end();
var sign = start[1]-end[1];
var dis = Math.abs(end[1]-start[1]);
var y = sign<=0?start[1]+dis*0.8:end[1]+dis*0.2
// console.log(start[0]-end[0]);
// return [x,end[0]];
h_handler.setStart([end[0]-1,y]).setDisplay('block');
}
var qcanvas = new Qcanvas({
id:'qcanvas',
width:500,
height:500,
mouseup:function(){
resetHandlerPosition();
create_range();
},
mousemove:function(){
if(qcanvas.dragAim !== null && qcanvas.dragAim.id ==h_handler.id){
//重新计算line2的x坐标到起点的的距离点整个宽度的比例
percent = Math.abs((h_handler.start[0]-a.start[0])/(a.start[0] - b.start[0]))
}
}
});
a = qcanvas.qarc.arc({
start:[50,50],
r:10,
sAngle:0,
eAngle:360,
fillColor:'#ffff00',
borderColor:'#000',
mousedown:function(){
h_handler.setDisplay('none')
},
mouseup:function(){
resetHandlerPosition();
create_range();
}
})
b = qcanvas.qarc.arc({
start:[200,200],
r:10,
sAngle:0,
eAngle:360,
fillColor:'#c3c3c3',
borderColor:'#000',
mousedown:function(){
h_handler.setDisplay('none')
},
mouseup:function(){
resetHandlerPosition();
create_range();
}
})
var percent = 0.8;
var range = [];
var h_handler = {};
//句柄划动限制区域
var create_range = function(){
var f = function(){
//A在左 B在右
if(a.start[0] <= b.start[0]){
if(a.start[1] <= b.start[1]){
//A
// |
//h1 \ h2
// ↓
// B
return [[a.start[0]+5,a.start[1]],[b.start[0]-5,b.start[1]]];
}else{
// B
// ↑
//h1 / h2
// |
//A
return [[a.start[0]+5,b.start[1]],[b.start[0]-5,a.start[1]]]
}
}else{
//B在左 A在右
if(b.start[1] <= a.start[1]){
// B
// ↑
//h1 \ h2
// |
// A
return [[b.start[0]+5,b.start[1]],[a.start[0]-5,a.start[1]]]
}else{
// A
// |
//h1 / h2
// ↓
//B
return [[b.start[0]+5,a.start[1]],[a.start[0]-5,b.start[1]]];
}
}
}
range = f();
}
create_range();
//生成三条直线的坐标
var caleHandler1 = function(a,b){
var start = a.start;
var end = b.start;
// 竖向模式
return {
'l1':function(){return [start,[(end[0]-start[0])*percent+start[0],start[1]]]},
'l2':function(){return [[(end[0]-start[0])*percent+start[0],start[1]],[(end[0]-start[0])*percent+start[0],end[1]]]},
'l3':function(){return [[(end[0]-start[0])*percent+start[0],end[1]],end]}
}
// //A
// // |
// //h1 \ h2
// // ↓
// // B
// // 或
// // A
// // |
// //h2/h1
// // ↓
// // B
// if(start[1]<=end[1]){
// //模向模式
// // return {
// // 'l1':function(){return [start,[start[0],(end[1]-start[1])*0.5+start[1]]]},
// // 'l2':function(){return [[start[0],(end[1]-start[1])*0.5+start[1]],[end[0],(end[1]-start[1])*0.5+start[1]]]},
// // 'l3':function(){return [[end[0],(end[1]-start[1])*0.5+start[1]],end]}
// // }
// // 竖向模式
// return {
// 'l1':function(){return [start,[(end[0]-start[0])*percent+start[0],start[1]]]},
// 'l2':function(){return [[(end[0]-start[0])*percent+start[0],start[1]],[(end[0]-start[0])*percent+start[0],end[1]]]},
// 'l3':function(){return [[(end[0]-start[0])*percent+start[0],end[1]],end]}
// }
// }
// // B
// // ↑
// //h1\h2
// // |
// // A
// //或
// // B
// // ↑
// // h2/h1
// // |
// // A
// if(start[1]>=end[1]){
// //模向模式
// // return {
// // 'l1':function(){return [start,[start[0],(start[1]-end[1])*percent+end[1]]]},
// // 'l2':function(){return [[start[0],(start[1]-end[1])*percent+end[1]],[end[0],(start[1]-end[1])*percent+end[1]]]},
// // 'l3':function(){return [[end[0],(start[1]-end[1])*percent+end[1]],end]}
// // }
// //竖向模式
// return {
// 'l1':function(){return [start,[(start[0]-end[0])*percent+end[0],start[1]]]},
// 'l2':function(){return [[(start[0]-end[0])*percent+end[0],start[1]],[(start[0]-end[0])*percent+end[0],end[1]]]},
// 'l3':function(){return [[(start[0]-end[0])*percent+end[0],end[1]],end]}
// }
// }
}
var tmp = null;
var line1 = qcanvas.qline.line({
start:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l1']();
return t[0];
},
end:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l1']();
return t[1];
},
pointerEvent:'none',
width:1,
})
var line2 = qcanvas.qline.line({
start:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l2']();
return t[0];
},
end:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l2']();
return t[1];
},
pointerEvent:'none',
width:1,
withText:'ddd',
})
var line3 = qcanvas.qline.line({
start:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l3']();
return t[0];
},
end:function(){
var points = tmp === null?caleHandler1(a,b):tmp;
var t = points['l3']();
return t[1];
},
like:'->',
pointerEvent:'none',
width:1,
})
var getStart = (function(){
var start = line2.start();
var end = line2.end();
var sign = start[1]-end[1];
var dis = Math.abs(end[1]-start[1]);
var y = sign<=0?start[1]+dis*0.8:end[1]+dis*0.2
// console.log(start[0]-end[0]);
return [end[0]-1,y];
})()
h_handler = qcanvas.qtext.text({
text:'=',
color:'red',
textAlign:'center',
textBaseline:'middle',
fontSize:'26px',
start:getStart,
degree:90,
drag:'horizontal',
dragRange:function(){return range},
// mouseout:function(){
// qcanvas.dragAim =null;
// },
mousemove:function(){
if(qcanvas.dragAim !== null && qcanvas.dragAim.id ==this.id){
//重新计算line2的x坐标到起点的的距离点整个宽度的比例
percent = Math.abs((this.start[0]-a.start[0])/(a.start[0] - b.start[0]))
}
},
mouseup:function(){
resetHandlerPosition();
}
})
qcanvas.raiseToTop(h_handler);
}
</script>
</html>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lizhicheng99/qcanvas.git
[email protected]:lizhicheng99/qcanvas.git
lizhicheng99
qcanvas
qcanvas
gitee

搜索帮助