首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为JavaScript数组的每个元素赋予不同的“类型”?

如何为JavaScript数组的每个元素赋予不同的“类型”?
EN

Stack Overflow用户
提问于 2013-03-13 02:46:26
回答 1查看 2.4K关注 0票数 0

我有一个JavaScript数组,它包含许多图像。这些图像都是从我的HTML中的一个隐藏部分中提取的,使用的行如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sources[0] = document.getElementById("building").src

我之所以从HTML而不是直接从源代码中获取图像,是因为我想在HTML5画布上显示它们中的大约30个,如果我要直接将它们从源代码加载到JavaScript代码中,页面需要很长时间才能加载,所以我已经将它们“预加载”到HTML的一个隐藏部分中,然后从那里加载到JavaScript代码中。

因此,我使用以下内容创建了我的JavaScript数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sources = [];
sources[0] = document.getElementById("building").src,
sources[1] = document.getElementById("chair").src,
....

(向sources数组添加图像大约有30行)。

其想法是有四、五种不同类型的图像(即,一些是资产,另一些是负债,等等),用户将被要求将每个图像拖到相应的描述框中(也显示在画布上)。

所以我想做的是,把图像放在一个数组中的不同的“组”中。我已经看过它,我的理解是,最好的方法是使用关联数组,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sources = {
    name1 : ["name1", "place1", "data1"],
    name2 : ["name2", "place2", "data2"],
    name3 : ["name3", "place3", "data3"]
};

但我不知道如何在我目前的情况下使用这个.我会做以下事情吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sources = {
    asset1 : document.getElementById("building").src,
    asset2 : document.getElementById("chair").src,

    liability1: document.getElementById("electricity").src,
    ...
};

然后,当用户将图像拖到他们认为属于的描述框时,我将如何检查图像是否属于它被拖到的描述框?

我打算检查图像是否被拖到正确的描述框中的方式是,当在其中一个‘可拖动’图像上检测到一个mousedown事件时,将一个布尔值设置为"true“,并跟踪光标在画布上移动时的x&y坐标。

然后,当触发mouseup事件时,我将检查光标在这一点上的坐标。如果光标将图像放置到绘制其中一个描述框的位置(例如,x在50-100之间,y在150-200之间,负债描述框位于x 150-200,y 150-200),那么我将检查哪个描述框位于该位置(循环遍历描述框位置的数组,并检查光标所在位置的哪个描述框)。

一旦我在那个位置有了描述框的名称,我就会检查刚刚被删除的图像是什么类型,如果它与放在放置位置的框相匹配,它将从画布上消失,如果不是,它将被拉回原来被用户“拾取”的地方。

我不确定如何做到这一点,如何访问用户从数组中单击的“类型”图像?

编辑2013-03-13T14:15

所以我已经给出了建议的答案。但是,当我现在在浏览器中查看我的页面时,画布将不显示,并且在控制台中会出现一个“未显示的异常”错误。此错误消息显示:

未明的例外:[例外.“组件返回的失败代码: 0x80040111 (NS_ERROR_NOT_AVAILABLE) nsIDOMCanvasRenderingContext2D.drawImage”ns结果:"0x80040111 (NS_ERROR_NOT_AVAILABLE)“位置:"JS帧::JS:第4250行”数据: no]

我想知道这是不是因为我在这个函数结束时调用的函数.?为了进一步解释,我正在window.onload函数中创建和使用window.onload数组。目前的情况如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.onload = function(){
    var sources = {
        assets: [],
        liabilities: [],
        income: [],
        expenditure: []
    }
    console.log("the code reaches here");
    sources.assets[0] = document.getElementById("building").src,
    sources.assets[1] = document.getElementById("chair").src,
    sources.assets[2] = document.getElementById("drink").src,
    sources.assets[3] = document.getElementById("food").src,
    sources.assets[4] = document.getElementById("fridge").src,
    sources.assets[5] = document.getElementById("land").src,
    sources.assets[6] = document.getElementById("money").src,
    sources.assets[7] = document.getElementById("oven").src,
    sources.assets[8] = document.getElementById("table").src,
    sources.assets[9] = document.getElementById("van").src,

    sources.liabilities[10] = document.getElementById("burger").src,
    sources.liabilities[11] = document.getElementById("chips").src,

    /* I have loads of lines like this, adding in roughly 30 images */

    /*Maybe create an array of attributes within each position
      of this array, so that I have access to all of each
      element's attributes. */

    /*Create an associative array for the images and their types*/
    var imageTypes = new Array();

    /*Use a loop to populate the associative array, declare variables for the total number
      of items in each group, declare a variable for the item being for example: */

    var numAssets = 10;
    var numLiabilities = 5;
    var numEx = 11;
    var numInc = 8;

    // Error checking- check total of these numbers adds up to the number elements in sources array.

    var j = 0; // This is to indicate the location of the image in sources array

    loadImages(sources, drawImage);
    drawGameElements();
    drawDescriptionBoxes();
    //drawBox();

    stage.add(imagesLayer);
};

因为我在window.onload函数末尾调用的其他函数之一,画布现在没有显示吗?但是在我更改sources数组之前,这些函数调用是正确执行的,所以我在sources数组中更改的内容可能有问题吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-13 02:56:30

我建议重组你的消息来源,反对:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sources = {
  assets: [],
  liabilities: []
};

sources.assets[0] = document.getElementById("building").src;
sources.assets[1] = document.getElementById("chair").src;
...
sources.liabilities[0] = document.getElementById("electricity").src;
...

源对象是可选的,您可以只使用资产和负债数组。

然后,您可以使用以下答案:如何确定对象是否在数组中来计算所选图像的“类型”。

或者,您可以根据图像的“类型”将类添加到图像中,然后在用户选择时检查它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15383119

复制
相关文章
GoogleMaps api for javascript demo 动态按顺序加载marker
@{ } <!DOCTYPE html> <html lang="zh"> <head> <meta name="viewport" content="initi
阿新
2018/04/12
8040
JavaScript 将对象数组按字母顺序排序
Chrome、IE、Edge、Firefox、Safari、Opera 等 都支持 sort() 方法。
唐志远
2023/07/26
6330
JavaScript 将对象数组按字母顺序排序
JavaScript 将对象数组按字母顺序排序
1.if条件语句 + sort() 2.localeCompare() + sort() 3.Collator() + sort()
唐志远
2023/08/01
2610
JavaScript 将对象数组按字母顺序排序
junit方法按顺序执行
选定版本,直接加注解
IT云清
2021/12/06
1.3K0
junit方法按顺序执行
sql按顺序去重
参考博客: https://blog.csdn.net/qtvb1987/article/details/42081585
周杰伦本人
2022/10/25
8450
sql按顺序去重
数组按指定顺序排序
数组排序可以直接使用 sort() 方法,可以对数组按规律排序。 但如果指定一个没有规律的顺序进行排序呢? 同样可以使用  sort() 方法: const data = [   { name: '张三', code: 'zs' },   { name: '王五', code: 'ww' },   { name: '赵七', code: 'zq' }, ]; data.sort((star, next) => {   const sortList = ['zq', 'zs', 'ww']   return 
德顺
2022/06/12
2.7K0
HTML加载顺序
完成了若干个基于WEB的项目, 也了解了从前端的js,css,html到后端python/php等, 二者如何交互, 最终浏览器如何执行, 这些在心里也已经很明确了. 不过一个问题一直萦绕在心中,那就是:
用户7657330
2020/08/14
1.9K0
vue for循环中按顺序axios请求拿到每条数据对应的状态
在循环数组的时候基于每个对象中的某个参数来进行数据请求,获取当前对象对应的数据状态 实现方法基于最新的es6中的async await 来实现 首先要把对应的Promise方法进行一个封装
李维亮
2021/07/08
1.9K0
实现线程按顺序输出ABC
线程按顺序输出ABC 实现描述:建立三个线程A、B、C,分别按照顺序输出十次ABC 首先建立一个方法,按照条件进行输出 class PrintABC{ private int index=0; public synchronized void print(int n) { // TODO Auto-generated method stub try { while(index!=n) { wait(); } if(index==0) { System.out.
呆呆
2021/10/06
7810
JavaScript 按值传递 & 按引用传递
其次,对象的比较并非值的比较:对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等。     即使两个对象包含同样的属性和相同的值,它们也是不相等的。各个索引元素完全相等的两个数组也不相等
书童小二
2018/09/03
3.8K0
Javascript - 事件顺序
原文标题:Javascript - Event order 原文链接:https://www.quirksmode.org/js/events_order.html Netscape 4 只支持事件捕获,Explorer只支持事件冒泡。Netscape 6和 Konqueror冒泡和捕获均支持,但Opera 和iCab冒泡和捕获均不支持。 在介绍事件的那篇文章(文章链接:https://www.quirksmode.org/js/introevents.html)中,我提了个看起来比较难以理解的问题:“
崔庆才
2018/06/25
1K0
hive-行转列按顺序合并
目录 一、背景 二、实现 1.建表ddl 2.示例数据 3.按顺序合并 4.按顺序合并结果 5.可以看到最后一条最长的才是我们需要的数据 6.结果 ---- ---- 一、背景 想实现行转列按顺序合并,但是impala不支持,故用hive实现 二、实现 1.建表ddl create table a( id bigint comment '主键', type bigint comment '分类', start_time bigint comment '开始时间,时间戳', end_time big
chimchim
2022/11/13
2.1K0
hive-行转列按顺序合并
java | 如何让线程按顺序执行?
本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。使用的方法如下:
JavaFish
2019/10/16
6.5K0
Java类加载的顺序
那一年,呼延十又回想起被加载顺序支配的恐惧,笔试题上,好几个类,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句….
呼延十
2019/07/01
1.3K0
java变量的加载顺序
学习编程思想 1 package com.test.java.classs; 2 3 /** 4 * Created by Administrator on 2015/12/7. 5 * 在类的内部,变量定义的顺序决定了初始化的顺序。 6 * 变量会在任何方法(包含构造器)被调用之前得到初始化 7 */ 8 public class Variable { 9 public static void main(String[] args) { 10 House
Ryan-Miao
2018/03/13
1.1K0
javascript按位异或(^)[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。<script type=”text/javascript”> var num1=25; var num2=3; alert(num1^num2);//输出: 26 ;对两个数值的二进制写法进行比较,只有当相同位置上的数字只有一个1时,才返回1,有两个1或者都是0则返回0,然后转换成十进制数值; </script>
全栈程序员站长
2022/09/06
8460
让线程按顺序执行 8 种方法
本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。使用的方法如下:
业余草
2019/09/18
2K0
让线程按顺序执行 8 种方法
web.xml 组件加载顺序
在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前。
用户1257393
2018/07/30
8020
web.xml 组件加载顺序
在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前。
用户1257393
2018/07/30
8930
点击加载更多

相似问题

按顺序加载JavaScript脚本

64

按特定顺序获取api请求

22

JavaScript按顺序获取多个请求

11

如何强制JavaScript按顺序加载?

11

Javascript承诺按反向顺序加载

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文