如何显示/隐藏画布的一部分
How to Show/ hide part of canvas?
这是我的JS小提琴
我有一个要求,例如当用户单击中心圆时,应该切换外圆,当用户单击外部小圆圈时,应该更改中心圆值。
在这里,我不知道如何在用户单击中心圆圈时显示/隐藏画布的一部分?
关于如何做到这一点的任何帮助?
GenerateCanvas();
function GenerateCanvas() {
try {
var FlagCircleCenterCoordinates = new Array();
var FlagCircles = [];
var CenterX = document.getElementById('canvasFlag').width / 2;
var CenterY = document.getElementById('canvasFlag').height / 2;
var OuterTrackRadius = 98;
var InnerTrackRadius = 70;
var InnerCircleRadius = 20;
var FlagElement = document.getElementById("canvasFlag");
var ObjContext = FlagElement.getContext("2d");
// Outer track
ObjContext.fillStyle = "#FFF";
ObjContext.beginPath();
ObjContext.arc(CenterX, CenterY, OuterTrackRadius, 0, 2 * Math.PI);
ObjContext.strokeStyle = '#CCC';
ObjContext.stroke();
ObjContext.fill();
// Inner track
ObjContext.beginPath();
ObjContext.arc(CenterX, CenterY, InnerTrackRadius, 0, 2 * Math.PI);
ObjContext.strokeStyle = '#CCC';
ObjContext.stroke();
// Inner small circle
ObjContext.beginPath();
ObjContext.arc(CenterX, CenterY, InnerCircleRadius, 0, 2 * Math.PI);
ObjContext.strokeStyle = '#CCC';
ObjContext.stroke();
//Max 17...other wide need to change the Inner and Outer circle radius
var FlagImagesArray = [1, 2, 3,4,5];
if (FlagImagesArray.length > 0) {
var StepAngle = 2 * Math.PI / FlagImagesArray.length;
var FlagCircleRadius = (OuterTrackRadius - InnerTrackRadius) / 2;
var RadiusOfFlagCircleCenters = OuterTrackRadius - FlagCircleRadius;
for (var LoopCnt in FlagImagesArray) {
var CircleCenterCoordinates = new Object();
CircleCenterCoordinates.PostionX = CenterX + (Math.cos(StepAngle * (parseInt(LoopCnt) + 1)) * RadiusOfFlagCircleCenters);
CircleCenterCoordinates.PostionY = CenterY + (Math.sin(StepAngle * (parseInt(LoopCnt) + 1)) * RadiusOfFlagCircleCenters);
ObjContext.beginPath();
ObjContext.arc(CircleCenterCoordinates.PostionX, CircleCenterCoordinates.PostionY, FlagCircleRadius, 0, 2 * Math.PI);
ObjContext.strokeStyle = '#CCC';
ObjContext.stroke();
ObjContext.fillStyle = 'blue';
ObjContext.fillText(FlagImagesArray[LoopCnt], CircleCenterCoordinates.PostionX, CircleCenterCoordinates.PostionY);
FlagCircleCenterCoordinates[LoopCnt] = CircleCenterCoordinates;
var ObjFlagCircle = {
Left : CircleCenterCoordinates.PostionX - FlagCircleRadius,
Top : CircleCenterCoordinates.PostionY - FlagCircleRadius,
Right : CircleCenterCoordinates.PostionX + FlagCircleRadius,
Bottom : CircleCenterCoordinates.PostionY + FlagCircleRadius,
FlagName : FlagImagesArray[LoopCnt]
}
FlagCircles[LoopCnt] = ObjFlagCircle;
}
$('#canvasFlag').mousemove(function (Event) {
debugger;
$(this).css('cursor', 'auto');
var ClickedX = Event.pageX - $('#canvasFlag').offset().left;
var ClickedY = Event.pageY - $('#canvasFlag').offset().top;
for (var Count = 0; Count < FlagCircles.length; Count++) {
if (ClickedX < FlagCircles[Count].Right &&
ClickedX > FlagCircles[Count].Left &&
ClickedY > FlagCircles[Count].Top &&
ClickedY < FlagCircles[Count].Bottom) {
$(this).css('cursor', 'pointer');
break;
}
}
});
$('#canvasFlag').click(function (Event) {
debugger;
$(this).css('cursor', 'auto');
var ClickedX = Event.pageX - $('#canvasFlag').offset().left;
var ClickedY = Event.pageY - $('#canvasFlag').offset().top;
for (var Count = 0; Count < FlagCircles.length; Count++) {
if (ClickedX < FlagCircles[Count].Right &&
ClickedX > FlagCircles[Count].Left &&
ClickedY > FlagCircles[Count].Top &&
ClickedY < FlagCircles[Count].Bottom) {
ObjContext.fillStyle = "#FFF";
ObjContext.beginPath();
ObjContext.arc(CenterX, CenterY, InnerCircleRadius - 1, 0, Math.PI * 2);
ObjContext.closePath();
ObjContext.fill();
ObjContext.fillStyle = "blue";
ObjContext.fillText(FlagCircles[Count].FlagName, CenterX, CenterY);
break;
}
}
});
}
}
catch (E) {
alert(E);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<canvas id="canvasFlag" width="200" height="200">
Your browser does not support the canvas
</canvas>
哦,
伙计。 好的,首先,你需要摆脱try/catch语句,它什么也没做。
接下来,您需要在函数体之外创建所有这些变量,我们需要能够从另一个函数访问它们
看起来您已经完成了所有点击功能,并且它也在工作。这很好,继续将以 jquery 开头的两行移动到 generateCanvas 函数之外。它们只需要运行一次,我们将需要再次调用 generate canvas。
第四,创建一个变量来关闭和打开外圈,并且仅在该变量为真时才在 generateCanvas(( 中绘制外环。您还应该在中断之前设置另一个设置为 Count 的全局变量,以便在重新生成画布时记住它。获取单击函数中的所有代码,用数字绘制内圈,并将其放入生成画布中。确保代码仅在您用来记住 Count 的变量设置为某些内容(即您已经单击了一个外部数字(时才调用
接下来,在点击函数中添加一个 generateCanvas(( 调用。现在,单击函数设置用于表示中心值的变量,重绘画布并返回。您需要在鼠标按下功能中提供更多逻辑才能弄清楚何时单击中心,但根据您已经拥有的代码,您可以弄清楚,您的主要问题只是将其设置为运行一次,而不是多次。这使得画布更像是图像,而不是活动的绘图元素
。不要忘记添加 FlagElement.width= FlagElement.width 来清除画布!(或者只是在上面画一个背景(
相关文章:
- Three.js-显示/隐藏对象的一部分
- 显示/隐藏外部.js文件的一部分
- 在主页上隐藏WordPress主题的一部分
- 如何显示/隐藏画布的一部分
- 是否可以显示/隐藏画布图像的一部分,例如图像精灵
- 使用 JavaScript 隐藏表的一部分,而不更改表布局
- 代码:折叠/隐藏 x 轴日期范围的一部分
- 什么'It’这是显示元素的一部分但隐藏其余部分的好方法
- 谷歌可视化-在作为仪表板一部分的表中隐藏列,但仍然可以使用StringFilter的底层数据
- 如何隐藏页面的一部分,并显示另一部分时,单击标题?jQuery
- 如何使用Java或jQuery隐藏/删除列的一部分,我无法访问HTML和建议
- 我如何隐藏一个按钮在视图使用MVC 3当页面的某一部分加载?我浏览分类教科书
- 我如何以编程方式显示/隐藏一个按钮,它是流星主体模板的一部分
- 如何隐藏3的一部分.PlaneBufferGeometry,当它位于另一个对象中时
- 隐藏部件的一部分
- 我如何从IE隐藏javascript的一部分
- iphone应用程序浏览器的书签栏隐藏了我网站的一部分
- 通过手机查看时隐藏网站的一部分
- 从隐藏框中删除字符串的一部分-javascript
- 如何在单击相应菜单项时显示/隐藏一部分内容,同时隐藏所有其他内容