Я хочу разрешить пользователю рисовать что-то вроде локтевого коннектора в MS Word на холсте HTML5 с помощью событий mouse.I googled через многие сайты, но не нашел подходящего решения. Может кто-нибудь мне помочь код для этого или указать ссылку, если таковой имеется. ThanksНарисуйте локоть коннектора на холсте HTML5
0
A
ответ
0
Вы можете нарисовать соединители локтя, используя линии плюс квадратную кривую, чтобы закруглить локоть.
Например, вы можете нарисовать локоть в верхнем левом углу холста от [x: 10, y: 100] до [x: 75, y: 20] и иметь радиус угла 12, например:
// top-left elbow from 10/100 to 75,20 with corner radius 12
ctx.beginPath();
ctx.moveTo(10,100);
ctx.lineTo(10,20+12);
ctx.quadraticCurveTo(10,20, 10+12,20);
ctx.lineTo(75,20);
ctx.strokeStyle=elbow.color;
ctx.lineWidth=elbow.linewi0dth;
ctx.stroke();
Демо: http://jsfiddle.net/m1erickson/3cN7b/
Вот пример кода для определения и рисования соединителей локтевые:
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
#canvas{border:1px solid red;}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var elbows=[];
elbows.push({
type:"topLeft",
start:{x:20,y:120},
end:{x:120,y:20},
cornerRadius:12,
color:"red",
linewidth:8
});
elbows.push({
type:"topRight",
start:{x:120,y:20},
end:{x:220,y:120},
cornerRadius:12,
color:"blue",
linewidth:8
});
elbows.push({
type:"bottomRight",
start:{x:220,y:120},
end:{x:120,y:220},
cornerRadius:12,
color:"green",
linewidth:8
});
elbows.push({
type:"bottomLeft",
start:{x:120,y:220},
end:{x:20,y:120},
cornerRadius:12,
color:"gold",
linewidth:8
});
drawElbows();
function drawElbows(){
for(var i=0;i<elbows.length;i++){
drawElbow(elbows[i]);
}
}
function drawElbow(elbow){
// starting elbow
ctx.beginPath();
ctx.moveTo(elbow.start.x,elbow.start.y);
// middle elbow
switch(elbow.type){
case "topLeft":
ctx.lineTo(elbow.start.x,elbow.end.y+elbow.cornerRadius);
ctx.quadraticCurveTo(
elbow.start.x,elbow.end.y,
elbow.start.x+elbow.cornerRadius,elbow.end.y
);
break;
case "topRight":
ctx.lineTo(elbow.end.x-elbow.cornerRadius,elbow.start.y);
ctx.quadraticCurveTo(
elbow.end.x,elbow.start.y,
elbow.end.x,elbow.start.y+elbow.cornerRadius
);
break;
case "bottomRight":
ctx.lineTo(elbow.start.x,elbow.end.y-elbow.cornerRadius);
ctx.quadraticCurveTo(
elbow.start.x,elbow.end.y,
elbow.start.x-elbow.cornerRadius,elbow.end.y
);
break;
case "bottomLeft":
ctx.lineTo(elbow.end.x+elbow.cornerRadius,elbow.start.y);
ctx.quadraticCurveTo(
elbow.end.x,elbow.start.y,
elbow.end.x,elbow.start.y-elbow.cornerRadius
);
break;
}
// ending elbow
ctx.lineTo(elbow.end.x,elbow.end.y);
ctx.strokeStyle=elbow.color;
ctx.lineWidth=elbow.linewi0dth;
ctx.stroke();
}
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="canvas" width=300 height=300></canvas>
</body>
</html>
Смежные вопросы
- 1. Нарисуйте искаженное изображение на холсте html5
- 2. Нарисуйте область на холсте
- 3. Нарисуйте трапецию на холсте
- 4. Нарисуйте линию на холсте
- 5. Нарисуйте вид на холсте
- 6. Нарисуйте изображение, не удаляя его на холсте html5
- 7. Нарисуйте SVG с стилей CSS на холсте HTML5
- 8. Нарисуйте квадрат на холсте HTML5 с сенсорными событиями
- 9. Нарисуйте четкие линии на холсте HTML5 с браузером zoom
- 10. Нарисуйте фоновое изображение на холсте
- 11. Нарисуйте текст вертикально на холсте
- 12. Нарисуйте линию штриховки на холсте
- 13. WPF: Нарисуйте сетку на холсте?
- 14. Android: нарисуйте вид на холсте
- 15. Нарисуйте мой рисунок на холсте?
- 16. Нарисуйте конкретную область на холсте
- 17. Позиционирование на холсте HTML5
- 18. HTML5 Антиквариат на холсте
- 19. Рисунок на холсте HTML5
- 20. Нарисуйте png на другой png на холсте
- 21. 3d элементы на 2d холсте HTML5
- 22. Нарисуйте более четкий текст на прозрачном холсте
- 23. Нарисуйте текст на холсте и несколько строк
- 24. KineticJS - Нарисуйте один слой на зазеркальном холсте
- 25. Нарисуйте картинку с 2 очками на холсте
- 26. Нарисуйте (прогрессивный) краски всплеск на холсте
- 27. Нарисуйте на холсте сразу после его добавления?
- 28. Нарисуйте самопересекающийся многоугольник на холсте HTML
- 29. Нарисуйте WebView на холсте в Android-L
- 30. Нарисуйте широты и долготы с полигона на холсте
Можете ли вы быть более конкретным, что вы пытались и где в вашем коде находились проблемы. Пожалуйста, поделитесь скрипкой, если это возможно. – K3N