将类添加到画布元素 HTML5 和 CreateJS

Posted

技术标签:

【中文标题】将类添加到画布元素 HTML5 和 CreateJS【英文标题】:Add class to canvas element HTML5 & CreateJS 【发布时间】:2015-03-12 15:56:03 【问题描述】:

我在画布中生成 5 个带有 for 循环的圆圈,我想给它们一个类,以便我可以用 jquery 控制它们,但我做错了什么。你们能弄清楚发生了什么吗?

var stage;
var quantity = 6,
    width = 60,
    height = 60,
    circles = [];

function init()
    stage = new createjs.Stage("myCanvas");
    stage.width = 500;
    stage.height = 600;
    createjs.Ticker.setFPS(60);
    createjs.Ticker.addEventListener("tick", onTick);
    setupGame();


function setupGame() 
    for(var i = 0; i < quantity; i++)    
         var circle = document.createElement("img");
         circle.setAttribute('src', 'images/circles/circle'+i+'.png');
         circle.className = "circle";
         circle.style.position = "absolute";
         circle.style.left = Math.floor((Math.random() * 100)) + "%";
         circle.style.top = Math.floor((Math.random() * 100)) + "%";
         circle.style.width = width + "px";
         circle.style.height = height + "px";
         document.body.appendChild(circle);
         circles.push(circle);
    


function onTick(e)
    stage.update(e);

新版本。在 JonnyD 的帮助下,我现在有了一个功能循环。唯一的问题是图像被附加到身体上,而不是我的舞台上。我已经尝试过 stage.appendChild(circle),但它不起作用。

这是一个在线资源的链接,你们可以查看一下 = LINK

【问题讨论】:

当然,我添加了项目的在线链接。 圆圈不是 DOM 对象,您应该使用相对于 createjs 库的方法。您应该阅读 DOC 并看到,不幸的是,我无法在这方面为您提供更多帮助 实际上我想要实现的是能够在渲染后 3 秒通过 css 更改图像/圆圈(它们是 png 的)的背景位置。但我首先尝试了更简单的事情,比如隐藏和展示它们。有什么想法吗? 您可以使用 jCanvas 图层来实现(使用“名称”作为 ID,使用“组”作为类) 【参考方案1】:

您的代码有很多问题。

您正在尝试向数组中的字符串添加属性,这是不可能的。使用点或括号表示法将属性添加到对象..

点符号

foo.bar.baz

方括号表示法

foo['bar']['baz']

我认为您想要做的是在“屏幕”或更技术上正确的 DOM (https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) 上创建五个圆圈,随机位置设置 H&W 为 60px,类名为 myClass..

我已经为你重写了你的代码,如果你愿意,你可以删除样式 javascript 行并将它们添加到 CSS 中。你真正做错的只是试图向数组值添加属性,错误的代码技术和在宽度、高度之前缺少 .style。 注意 您仅将 className 和 width 和 height 属性添加到 DOM 元素。

您现在可以使用带有 CSS 的 nth-child 选择器通过 for 循环和 circles 数组 访问各个圆圈。 例如 .circle:nth-child(1) 动画/过渡

var quantity = 5,
    width = 60,
    height = 60
    circles = [];

function setUp() 
    for(var i = 0; i < quantity; i++)    
         var circle = document.createElement("div");
         circle.className = "circle";
         circle.style.position = "absolute";
         circle.style.left = Math.floor((Math.random() * 100)) + "%";
         circle.style.top = Math.floor((Math.random() * 100)) + "%";
         circle.style.backgroundColor = "black";
         circle.style.width = width + "px";
         circle.style.height = height + "px";
         circles.push(circle);
         document.body.appendChild(circle);
    

setUp();
.circle 
  border-radius: 50%;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;

【讨论】:

好的,你让我明白了很多,非常感谢你。但是,我想要实现的就在这里:simeriaionut.com/keafocus。我希望这些圆圈是 png 并且能够在我的画布中使用它们。我为此使用 CreateJS。所以问题是,如何使用图像而不是生成的形状以及如何将它们集成到我的画布中?【参考方案2】:

我没有看到你在使用 CreateJS.. 在这种情况下使用这样的符号是可以的..

var circle = new createjs.Shape();
circle.graphics.beginFill("DeepSkyBlue").drawCircle(0, 0, 50);
circle.x = 100;
circle.y = 100;
stage.addChild(circle);

确保您也更新了舞台。

stage.update();

【讨论】:

【参考方案3】:

canvas 内的东西不在 DOM 中,但 Scalable Vector Graphics 图像中的元素在并且可以通过这种方式进行操作。

如果方便,请尝试使用 SVG。 svg.js 是一个用于操作 SVG 的轻量级库。

【讨论】:

【参考方案4】:

我意识到这个问题已经得到解答,但是因为我点击这个试图找出如何在 jquery 中向画布对象添加一个类,所以我将发布如何做到这一点。

var thing = canvas_object;
$('body').append(thing);
var canvas = $('canvas');
canvas.addClass('test');

【讨论】:

以上是关于将类添加到画布元素 HTML5 和 CreateJS的主要内容,如果未能解决你的问题,请参考以下文章

如何在画布元素中添加超链接到图像?

HTML5Canvas画布

如何将简单的 onClick 事件处理程序添加到画布元素?

ReactJS画布drawImage不显示html5视频元素

如何使用 jquery 将动态创建的 img 元素加载到 HTML5 画布中

直播 HTML5 视频绘制到画布不工作