2015-08-22 2 views
-2

Я создал функцию, которая вызывается каждый раз, когда меняются значения моих ползунков. Проблема состоит в том, что эта функция генерирует массив, который позже переходит к другим функциям. Пока что так хорошо, но слайдеры могут быть отрегулированы столько раз, сколько пользователь хочет, и, как я уже сказал, это вызывает функцию, которая генерирует массив, а это значит, что я могу получить сотни или даже тысячи массивов, в то время как мне нужен последний , Вот мой код:Удаление массивов, сгенерированных функцией

function tg() { 

    $(".dot").remove(); 

    var p, x, y, xo, yo, agl, spd, g, t = 1, isin2, angle1, n = 0, i = 1; 
    var m = []; 

    p = $("#ba").position(); 
    xo = p.left; 
    yo = p.top; 

    spd = $("#spd").val(); 
    agl = $("#agl").val(); 
    g = $("#g").val(); 
    angle1 = formula; 

    isin2 = true; 

    while (isin2) { 
     y = formula; 
     x = formula; 

     m.push([x, y]); 

     //... 

     t++; 
     isin2 = isin(x, y); 

    } 
    if (isin2 == false) { 
     $(".dot").last().remove(); 
     m.pop([x, y]); 
     console.log(m); 
    } 
    activate(m); 
} 

Там приходят ползунки, я на самом деле дали только один из них, потому что две остальные являются абсолютными копиями, они просто адресации других переменных.

$(document).ready(function(){ 
    $("#slagl").slider({ 
     min:0, 
     max:89, 
     value:15, 
     range:"min", 
     slide: function(event, ui){ 
      $("#agl").val(ui.value); 
      tg(); 
     } 
    }); 

That's the what console.log() returns for m

Как вы можете легко видеть, что это просто складывает все новые и новые массивы без очистки других. Цель состоит в том, чтобы удалить все остальные избыточные массивы, сделанные на слайде, и оставить только последний, каждый раз, когда вызывается функция.

+0

'm.push ([x, y]);' если вам нужен только один элемент, чем применить его прямо к m или к первому элементу или просто сохранить последние 10 или около того ... –

+0

Нет, Мне нужно множество элементов, хранящихся в массиве, но не пучок массивов с множеством элементов, вставленных в них, как это происходит. Даже малейшее скольжение слайдера добавляет 5-6 новых массивов. Я думаю, браузер сохраняет их где-то, но мне нужно найти, где это место и как получить к нему доступ. – KDX2

+0

hint [setTimeout] (https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) –

ответ

1

В личной беседе с OP мы выяснили, что массивы были на самом деле правильно сгенерированы. Проблема заложена в activate(m);, которая будет вызываться каждый раз при изменении слайдера. В activate() событию клика назначается кнопка, в результате которой на каждом обновлении происходит наложение событий с избыточным кликом. Таким образом, всякий раз, когда была нажата кнопка, он также выполнял бы свой код со старыми значениями массива.

0

Используйте функцию «перемена» слайдера. Это вызвано только один раз, когда пользователь отпускает обработчики слайдера по сравнению с обратным вызовом «слайд», который вызывается при каждом перемещении пикселя.

+0

Вы можете улучшить свой ответ с помощью некоторых ссылок и ссылок на ссылки. –

+0

Это одна из вещей, которые я решил сделать, поскольку полностью согласен с тем, что это значительно сократило бы массивы, но, тем не менее, предыдущие все еще будут содержаться где-нибудь в браузере/программе, и мне нужно получить к ним доступ и избавиться от них. Приятно, однако, я сейчас применим это. :) Мы близки .. – KDX2

+0

* это уменьшило на 90% количество массивов, успешно, теперь мы должны удалить последний. Я попытаюсь объяснить это более точно, эти массивы - это траектория точек, через которые должен пройти мой «мяч».На каждом слайде я создаю новую траекторию таких точек, и когда я делаю> 1 новый, мяч начинает следовать за первым, когда-либо созданным, затем вторым, пока он не достигнет последнего, что делает его, хорошо багги: D – KDX2

0

Вы должны либо использовать функцию слайдера change или использовать какой-то дребезг:

$(document).ready(function(){ 
    var timer; 
    $("#slagl").slider({ 
    min:0, 
    max:89, 
    value:15, 
    range:"min", 
    slide: function(event, ui){ 
     $("#agl").val(ui.value); 
     if(timer) { 
     clearTimeout(timer); 
     } 
     timer = setTimeout(tg, 500); 
    } 
    }); 
}); 

Измените значение 500 на то, что работает лучше для вашего использования.

+0

Да, это очень помогло мне, так как оно уменьшило значительную часть массивов, но оно все еще сохраняет ранее сгенерированный массив где-то и при смене слайдера мне нужно избавиться от ранее вычисленного массива и поместить новый с новыми значениями полученный от ползунка на своем месте. – KDX2

+0

Что вы подразумеваете под 'он по-прежнему сохраняет ранее сгенерированный массив где-нибудь?? Массив не сохраняется нигде. Он автоматически удаляется GC. Не могли бы вы объяснить, что вы имеете в виду? –

+0

Хорошо, у меня есть ползунки, и с ними я манипулирую vars ang, spd и g, с которыми я вычисляю x = .., y = ... Поскольку этот процесс зациклен, я просто нажимаю только что вычисленные x и y, re, математическая, времени (t). Когда я заканчиваю сортировку x и y-s, я получаю массив, который кажется «контуром» моего снаряда и который я собираюсь отправить функции, реализующей «движение» по этому пути. Из того, что я вижу, могу сказать, что если я отрегулирую один или два или все слайдеры, и я нажму «играть», мяч начнет следовать по первому пути, затем второй и продолжит – KDX2

Смежные вопросы