Форум

Управление плагином извне

13 февраля 2017 23:37
Извиняюсь за вопрос, который наверняка обсуждался, но мне не удалось найти на форуме ответа.
Задача менять цвет текстуры кнопками, которые "живут" на главное странице.

Я сделал так:

В главной странице объявил кнопку:
<input id="btn" type="button" onclick="SetColor('#000000')"/>

В скрипте сделал такую функцию:

var MainColor = "#000000";

function SetColor(NewColor){
MainColor = NewColor;
canvas_cont.dispatchEvent(new CustomEvent("ChangeColor"));
}

При загрузке плагина объявляю:
canvas_cont.addEventListener("ChangeColor", ChangeColor, false);

Все работает отлично, кроме InternetExplorera.
Он выдает ошибку на строчку canvas_cont.dispatchEvent(new CustomEvent("ChangeColor"));
Команда не поддерживается объектом.

В связи с этим вопросы:
- правильный ли вообще подход я применил для управления плагином извне?
- если да, то как победить IE?

Заранее спасибо за помощь.
14 февраля 2017 10:32
Все работает отлично, кроме InternetExplorera.
В IE нужно использовать:
var event = document.createEvent("CustomEvent");
event.initCustomEvent("ChangeColor", false, false, null);

Пример можно посмотреть в движке - файл assets.js.


правильный ли вообще подход я применил для управления плагином извне?
О разработке приложений можно почитать в документации.
14 февраля 2017 20:51
Спасибо!
18 февраля 2017 14:19
- правильный ли вообще подход я применил для управления плагином извне?
вообще более стандартный подход будет таким:

в html та же кнопка:
<input id="btn" type="button">


а в скрипте навешиваем обрабтчик на её нажатие:
var MainColor = "#000000";

var btn = document.getElementById("btn");
btn.addEventListener("click", function(event) {
    var new_color = "#000000";
    MainColor = new_color;
    ChangeColor(new_color);
});


а если нужно несколько кнопок + иметь четкое соответствие: кнопка-цвет, то можно либо все это вручную задать в скрипте в виде массива, либо воспользоваться стандартным свойством dataset (data-имя_атрибута) и задавать это прямо в html:

<input type="button" class="color_button" data-color="#000000">
<input type="button" class="color_button" data-color="#121212">
<input type="button" class="color_button" data-color="#345678">


потом в скрипте навесить обработчик на событие click по кнопкам:
// выбираем все нужные кнопки на странице
var buttons = document.getElementsByClassName("color_button");

for (var i = 0; i < buttons.length; i++) {
    var btn = buttons[i];
    // навешиваем обработчик события click на каждую кнопку
    btn.addEventListener("click", function(event) {
        var color = event.target.getAttribute("data-color");
        ChangeColor(color);
    });
}
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.