кнопка включения в javascript

#javascript #jbutton #onload

#javascript #jbutton #включение

Вопрос:

По ссылке:http://boukestar.nl/ani-map вы можете видеть, что я настроил векторную svg-карту, которая анимирована.

Моя единственная проблема в том, что я не знаю, как отключить или включить кнопку / страну, когда вы нажимаете на другую кнопку / страну. Все кнопки остаются активными, когда вы нажимаете на другую кнопку.

Это приводит к некорректной информации из загруженной страны.

HTML

 <button class="usa" onClick="usa()" class="hidden">Verendigde Staten</button><div id="landusa" class="hide"><img src="svg/infovs.svg" viewBox="0 0 1087 841.89"></div><div id="div1" style="display: none;"></div>
  

JS

 (function() {
    'use strict';
    var svg,
        button;
    document.addEventListener('DOMContentLoaded', function init() {
        button = document.querySelector('.usa');
        svg = document.querySelector('svg');
        button.addEventListener('click', clickHandler, false);
    });

    function clickHandler(e) {
        svg.classList.toggle('usa');
        e.target.classList.toggle('on');
    }
}());
  

У кого-нибудь есть идея?
Большое спасибо!
Букэ

Комментарии:

1. Вы могли бы по щелчку удалить класс ‘usa’ из всех SVG-файлов, а затем добавить класс в нужный SVG.

2. Что-то вроде этого ?

3. Это отключит страну на карте, когда вы нажмете на одну из кнопок… Разве невозможно поместить действие onload в качестве новой функции?

4. @Mikhailo, это близко к истине! boukestar.nl/ani-map Когда вы активируете, нажав на кнопку Verenigde Staten, а затем вы нажимаете на Бразилию, вы увидите, что информация о стране и земле (США) Verenigde Staten будет закрыта / переключена. Действительно приятно. Но еще не сама кнопка. Это включение остается активным после переключения.

5. Вам удалось это исправить? Если вы все еще на стадионе, ссылка ведет на. Вы близки, вам просто нужно сделать то же самое с on классом, который получают кнопки , возможно, некоторые другие удаления класса.

Ответ №1:

Вот мое решение. Если вы поместите свой код в JSFiddle или CodePen, я смогу его протестировать:

 <script>
document.addEventListener("DOMContentLoaded", function init(){
    var svg = document.querySelector("svg"),
        currentCountry,
        currentButton;


    function toggle(clickedButtonCountry){
        var clickedButton = document.querySelector("."   clickedButtonCountry);
        currentButton.classList.remove("on");
        clickedButton.classList.add("on");
        clickedButton.classList.remove("hidden");
        currentButton.classList.add("hidden");
        svg.classList.remove(currentCountry);
        svg.classList.add(clickedButtonCountry);
        currentCountry = clickedButtonCountry;
        currentButton = clickedButton;
    }
});
</script>

<button class="usa hidden" onClick="toggle('usa')">Verendigde Staten</button>
<button class="brazil hidden" onClick="toggle('brazil')">Brazil</button>

<svg></svg>
  

Таким образом, Javascript «запоминает», какая страна отображается в данный момент, а затем, когда кто-то нажимает на кнопку, он «запоминает» эту страну вместо этого.

Некоторые вещи, которые следует иметь в виду:

  • usa() означает, что у вас есть function usa(){} где-то, чего у вас нет (и не должно быть). Я думаю, вы собирались сделать что-то вроде toggle('usa')
  • У вас может быть несколько классов в одном class атрибуте, например <div class="foo1 bar2"></div>
  • document.querySelector возвращает только один элемент. document.querySelectorAll возвращает множество.
  • Использование classList.toggle может быть немного странным, потому что в нем не указано, следует ли добавлять или удалять класс. Я предпочитаю явно использовать classList.add и classList.remove . classList.contains очень полезен.

Комментарии:

1. Спасибо, но это не делает кнопки независимыми друг от друга. Нажатие на кнопку Usa, а затем на кнопку Brazil позволяет им обоим оставаться активными, а не только последней выбранной кнопке. Здесь вы можете протестировать это с моими файлами: jsfiddle.net/MrStar80/8bL96k6g

2. Думаю, сейчас я действительно близок к этому, но страны еще не стали независимыми: boukestar.nl/ani-map/test.html Как вы можете видеть, кнопки работают нормально. Обновил свои скрипты на: jsfiddle.net/MrStar80/8bL96k6g/7 можете ли вы взглянуть и протестировать это? Спасибо!