JavaScript-让多个元素异步闪烁

JavaScript-让多个元素异步闪烁,javascript,jquery,oop,Javascript,Jquery,Oop,我有多个部门。如果用户单击其中一个按钮,那么它应该开始闪烁几秒钟,然后返回到正常状态 它们应该完全独立工作,这意味着多个div应该能够同时闪烁 如果只涉及一个div,则很容易解决此问题。但是如果点击了多个div,那么只有一个会闪烁,另一个会停止 所以我认为如果我编写面向对象的代码,它会工作,但它仍然失败,我无法解释原因 到目前为止,这是我的代码,它可能太复杂了,但我需要知道为什么它不工作,即使我使用了对象 var-OAHelper=newObjectArrayHelper(); var ta

我有多个部门。如果用户单击其中一个按钮,那么它应该开始闪烁几秒钟,然后返回到正常状态

它们应该完全独立工作,这意味着多个div应该能够同时闪烁

如果只涉及一个div,则很容易解决此问题。但是如果点击了多个div,那么只有一个会闪烁,另一个会停止

所以我认为如果我编写面向对象的代码,它会工作,但它仍然失败,我无法解释原因

到目前为止,这是我的代码,它可能太复杂了,但我需要知道为什么它不工作,即使我使用了对象

var-OAHelper=newObjectArrayHelper();
var taskList=新数组();
$(“.blinkDivs”)。单击(函数(){
var ElementID=$(this.attr(“id”);
//ElementID不在数组中
如果(!OAHelper.checkIfObjectExists(任务列表,“id”,ElementID)){
var task=新任务(ElementID);
var newTask={id:ElementID,task:task};
任务列表推送(newTask);
var t=OAHelper.getValue(任务列表,“任务”,“id”,元素id);
如果(t!==false){
t、 眨眼();
}
}
});
功能任务(ElementID)
{
var self=这个;
this.id=元素id;
this.interval=null;
该限幅器=0;
this.toggle=0;
this.blink=函数()
{
$jqElement=$(“#”+self.id);
自限幅=0;
self.interval=setInterval(函数(){
如果(self.toggle==0){
$jqElement.css(“背景色”、“蓝色”);
self.toggle=1;
}否则{
$jqElement.css(“背景色”、“白色”);
self.toggle=0;
}
如果(自限幅器>4){
删除对象(任务列表,“id”,self.id);
clearInterval(self.interval);
}
self.limitor++;
}, 400);
}
}
/**
*此类提供了帮助器函数来对对象数组执行操作
*
*职能:
*
*删除对象,
*输出对象,
*更改特定键的值,
*检查特定对象是否存在,
*检查特定对象是否具有特定的键值对
*
*自动:爱德华德费克特
*@constructor
*/
函数ObjectArrayHelper()
{
/**
*运行对象数组的所有对象并搜索具有特定标识的记录。
*
*返回值:
*如果记录存在,则为true
*如果记录不存在,则为false
*
*自动:爱德华德费克特
*
*@param pObjectArray对象数组
*@param pIdentifier对象的标识符键
*@param pIdentifierValue搜索的标识符值
*@returns{boolean}
*/
this.checkIfObjectExists=函数(pObjectArray、pIdentifier、pIdentifierValue){
for(pObjectArray中的变量i){
for(pObjectArray[i]中的var键){
if(key==pIdentifier){
if(pIdentifierValue==pObjectArray[i][key]){
返回true;
}
}
}
}
返回false;
},
/**
*运行对象数组的所有对象并搜索具有特定标识的记录
*并检查特定键是否具有特定值。
*
*返回值:
*如果在记录中找到该值,则为true,
*如果不是,则为false。
*
*例如:
*var worker=新数组(
*{id:1,状态:“正在工作”},
*{id:2,状态:“完成”}
* );
*
*checkKeyValueInObjectArray(工作者,状态,“完成”,“id”,1);//返回:false
*checkKeyValueInObjectArray(工作者,状态,“完成”,“id”,2);//返回:true
*
*自动:爱德华德费克特
*
*@param数组pObjectArray对象数组
*@param string pSearchKey要在对象中搜索的键
*@param pCheckValue您正在搜索的值
*@param string pIdentifier对象的标识符键
*@param pIdentifierValue搜索的标识符值
*@returns{boolean}
*/
this.checkKeyValue=函数(pObjectArray、pSearchKey、pCheckValue、pIdentifier、pIdentifierValue)
{
for(pObjectArray中的变量i){
for(pObjectArray[i]中的var键){
if(key==pSearchKey){
if(pObjectArray[i][key]==pCheckValue){
if(pObjectArray[i][pIdentifier]==pIdentifierValue){
返回true;
}
}
}
}
}
返回false;
},
/**
*运行对象数组的所有对象,搜索具有特定标识的记录
*并将目标键设置为目标值。
*
*返回值:
*如果设置了该值,则为true
*如果未找到对象,则为false
*
*自动:爱德华德费克特
*
*@param pObjectArray对象数组
*@param pTargetKey
*@param pTargetValue
*@param pIdentifier对象的标识符键
*@param pIdentifierValue搜索的标识符值
*@returns{boolean}
*/
this.setValue=函数(pObjectArray、pTargetKey、pTargetValue、pIdentifier、pIdentifierValue)
{
for(pObjectArray中的变量i){
if(pObjectArray[i][pIdentifier]==pIdentifierValue){
pObjectArray[i][pTargetKey]=pTargetValue;
返回true;
}
}
返回false;
},
/**
*运行对象数组的所有对象,搜索具有特定标识的记录
*并返回目标值。
*
*返回值:
*如果获取值成功,则为true
*如果未找到对象,则为false
*
*自动:爱德华德费克特
*
*@param pObjectArray对象数组
*@param pTargetKey目标键
*@param pIdentifier对象的标识符键
*@param pIdentifierValue搜索的标识符值
*@returns{boolean}
*/
this.getValue=函数(pObjectArray、pTargetKey、pIdentifier、pIdentifierValue)
{
for(pObjectArray中的变量i){
if(pObjectArray[i][pIdentifier]==pIdentifierValue){
返回pObjectArray[i][pTargetKey];
}
}
雷图
function Task(ElementID)
{
   var self = this;
   this.id = ElementID;
   this.interval = null;
   this.limiter = 0;
   this.toggle = 0;
   $(".blinkDivs").css("background-color", "white");
   this.blink = function()
   {
    $jqElement = $("#" + self.id);

    self.limiter = 0;
    self.interval = setInterval(function() {

        if (self.toggle == 0) {
            $jqElement.css("background-color", "blue");
            self.toggle = 1;
        } else {
            $jqElement.css("background-color", "white");
            self.toggle = 0;
        }

        if (self.limiter > 4) {

            OAHelper.deleteObject(taskList, "id", self.id);
            clearInterval(self.interval);
        }
        self.limiter++;
    }, 400);
}
function Task(ElementID)
{
    var self = this;
    self.id = ElementID;
    self.interval = null;
    self.limiter = 0;
    self.toggle = 0;
    self.$jqElement = $("#" + self.id);
    self.blink = function()
    {
        self.limiter = 0;
        self.interval = setInterval(function() {

            if (self.toggle == 0) {
                self.$jqElement.css("background-color", "blue");
                self.toggle = 1;
            } else {
                self.$jqElement.css("background-color", "white");
                self.toggle = 0;
            }

            if (self.limiter > 4) {

                OAHelper.deleteObject(taskList, "id", self.id);
                clearInterval(self.interval);
            }
            self.limiter++;
        }, 400);
    }
}
//Call var task = createTask(elId); instead of new Task();
var createTask = function createTask(elementId) {
    var self = {
        id: elementId
      , interval: 0
      , limiter: 0
      , toggle: 0
      , $element: $jqElement = $("#" + elementId)
      , blink: function blink() {
            self.limiter = 0;
          self.interval = setInterval(function() {
                            if (self.toggle == 0) {
                self.$element.css("background-color", "blue");
                self.toggle = 1;
                } else {
                self.$element.css("background-color", "white");
                self.toggle = 0;
                }

            if (self.limiter > 4) {
                clearInterval(self.interval);
            }
            self.limiter++;
          }, 400);
        }
    };
    return self;
}