【发布时间】:2021-07-20 23:28:42
【问题描述】:
我已经制作了一个 Canvas HTML 页面。我还做了一个可以在页面上拖动的圆圈。我想在 Canvas 页面的右下角放置一个可拖动的圆圈。我试图将拖动圆圈代码与这个 html Canvas 代码结合起来,但它对我不起作用。这是我目前所拥有的:
// canvas html代码
<!DOCTYPE html>
<html>
<head>
<title>Help me find...</title>
<style> canvas { border: #333 0px solid; } </style>
</head>
<body> <canvas id="myCanvas" width="900" height="400"></canvas>
<script> var canvas = document.querySelector("#myCanvas");
var context = canvas.getContext("2d");
// orange image
var myImage = new Image();
myImage.src = "https://www.kirupa.com/canvas/images/orange.svg";
myImage.addEventListener("load", loadImage, false);
function loadImage(e) { context.drawImage(myImage, 0, 300, 70, 70);
// text context.font = "bold italic 26px Helvetica, Arial, sans-serif";
context.fillStyle = "red";
context.fillText("Help me find......", 53, 30); }
//Triangle
context.beginPath();
context.moveTo(20,43);
context.lineTo(50, 43);
context.lineTo(10,0);
context.closePath();
context.lineWidth = 3;
context.strokeStyle = "#DCB001";
context.stroke();
context.fillStyle = "yellow";
context.fill();
//line
context.beginPath();
context.moveTo(20, 60);
context.bezierCurveTo(0, 80, 100, 250, 50, 300);
context.stroke();
context.closePath();
</script>
</body>
</html>
//拖圈代码
<!DOCTYPE html>
<html>
<head>
<meta name="viewport"
content="width=device-width,
initial-scale=1.0,
user-scalable=no" />
<title>Drag/Drop/Bounce</title>
<style>
#container {
width: 50%;
height: 400px;
background-color: #333;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
border-radius: 7px;
touch-action: none;
}
#item {
width: 100px;
height: 100px;
background-color: rgb(245, 230, 99);
border: 10px solid rgba(136, 136, 136, .5);
border-radius: 50%;
touch-action: none;
user-select: none;
}
#item:active {
background-color: rgba(255, 255, 255, 1.00);
}
#item:hover {
cursor: pointer;
border-width: 20px;
}
</style>
</head>
<body>
<div id="outerContainer">
<div id="container">
<div id="item">
</div>
</div>
</div>
<script>
var dragItem = document.querySelector("#item");
var container = document.querySelector("#container");
var active = false;
var currentX;
var currentY;
var initialX;
var initialY;
var xOffset = 0;
var yOffset = 0;
container.addEventListener("touchstart", dragStart, false);
container.addEventListener("touchend", dragEnd, false);
container.addEventListener("touchmove", drag, false);
container.addEventListener("mousedown", dragStart, false);
container.addEventListener("mouseup", dragEnd, false);
container.addEventListener("mousemove", drag, false);
function dragStart(e) {
if (e.type === "touchstart") {
initialX = e.touches[0].clientX - xOffset;
initialY = e.touches[0].clientY - yOffset;
} else {
initialX = e.clientX - xOffset;
initialY = e.clientY - yOffset;
}
if (e.target === dragItem) {
active = true;
}
}
function dragEnd(e) {
initialX = currentX;
initialY = currentY;
active = false;
}
function drag(e) {
if (active) {
e.preventDefault();
if (e.type === "touchmove") {
currentX = e.touches[0].clientX - initialX;
currentY = e.touches[0].clientY - initialY;
} else {
currentX = e.clientX - initialX;
currentY = e.clientY - initialY;
}
xOffset = currentX;
yOffset = currentY;
setTranslate(currentX, currentY, dragItem);
}
}
function setTranslate(xPos, yPos, el) {
el.style.transform = "translate3d(" + xPos + "px, " + yPos + "px, 0)";
}
</script>
</body>
</html>
【问题讨论】:
-
在线分享您的代码之前,请使用适当的缩进。
-
好的,谢谢!我将尝试弄清楚如何做到这一点并对其进行编辑。
标签: javascript html canvas html5-canvas