MediaWiki:Test/Revamp.js: различия между версиями

Страница интерфейса MediaWiki
(Новая страница: «document.addEventListener('DOMContentLoaded', () => { // Конфигурация патронов const ammoConfig = { ammo1: { damage: 15, selector: '.AmmoTest1' }, ammo2: { damage: 20, selector: '.AmmoTest2' } }; // Инициализация системы боеприпасов class AmmoSystem { constructor() { this.totalDamage = 0; this.ammoElements = {}; this.initAmmo();...»)
 
Нет описания правки
Строка 1: Строка 1:
document.addEventListener('DOMContentLoaded', () => {
document.addEventListener("DOMContentLoaded", function () {
    // Конфигурация патронов
     const ammo1 = document.querySelector(".AmmoTest1");
     const ammoConfig = {
    const ammo2 = document.querySelector(".AmmoTest2");
        ammo1: { damage: 15, selector: '.AmmoTest1' },
    const damageDisplay = document.querySelector(".WeaponSummary");
        ammo2: { damage: 20, selector: '.AmmoTest2' }
     let selectedAmmo = null;
     };
    const damageValue = 20; // Фиксированный урон


     // Инициализация системы боеприпасов
     function updateDamageDisplay() {
    class AmmoSystem {
         if (selectedAmmo) {
         constructor() {
             damageDisplay.textContent = `Урон: ${damageValue}`;
             this.totalDamage = 0;
             damageDisplay.classList.add("updated");
             this.ammoElements = {};
             setTimeout(() => damageDisplay.classList.remove("updated"), 400);
             this.initAmmo();
        } else {
             this.initDamageDisplay();
             damageDisplay.textContent = "Урон: 0";
         }
         }
    }


        initAmmo() {
    function selectAmmo(ammo) {
            Object.entries(ammoConfig).forEach(([key, config]) => {
        if (selectedAmmo === ammo) {
                const element = document.querySelector(config.selector);
             selectedAmmo.classList.remove("active");
                if (element) {
             selectedAmmo = null;
                    element.dataset.damage = config.damage;
         } else {
                    element.addEventListener('click', () => this.toggleAmmo(element));
            if (selectedAmmo) {
                    this.ammoElements[key] = element;
                selectedAmmo.classList.remove("active");
                }
             }
            });
            selectedAmmo = ammo;
        }
             selectedAmmo.classList.add("active");
 
        initDamageDisplay() {
             this.damageDisplay = document.createElement('div');
             this.damageDisplay.className = 'damage-display';
            document.querySelector('.WeaponSummary').appendChild(this.damageDisplay);
            this.updateDisplay();
         }
 
        toggleAmmo(element) {
            element.classList.toggle('active');
             this.calculateDamage();
             this.animateDamage(element);
         }
         }
        updateDamageDisplay();
    }


        calculateDamage() {
    ammo1.addEventListener("click", function () {
            this.totalDamage = Object.values(this.ammoElements)
        if (!ammo1.classList.contains("disabled")) {
                .filter(ammo => ammo.classList.contains('active'))
            selectAmmo(ammo1);
                .reduce((sum, ammo) => sum + parseInt(ammo.dataset.damage), 0);
            ammo2.classList.toggle("disabled", selectedAmmo !== null);
         }
         }
    });


        updateDisplay() {
    ammo2.addEventListener("click", function () {
            this.damageDisplay.textContent = `Суммарный урон: ${this.totalDamage}`;
        if (!ammo2.classList.contains("disabled")) {
             this.damageDisplay.classList.toggle('updated', false);
             selectAmmo(ammo2);
             void this.damageDisplay.offsetWidth; // Trigger reflow
             ammo1.classList.toggle("disabled", selectedAmmo !== null);
            this.damageDisplay.classList.toggle('updated', true);
         }
         }
 
     });
        animateDamage(element) {
            element.style.transform = 'scale(1.1)';
            setTimeout(() => {
                element.style.transform = 'scale(1)';
                this.updateDisplay();
            }, 150);
        }
     }
 
    // Запуск системы
    new AmmoSystem();
});
});

Версия от 00:25, 4 февраля 2025

document.addEventListener("DOMContentLoaded", function () {

   const ammo1 = document.querySelector(".AmmoTest1");
   const ammo2 = document.querySelector(".AmmoTest2");
   const damageDisplay = document.querySelector(".WeaponSummary");
   let selectedAmmo = null;
   const damageValue = 20; // Фиксированный урон
   function updateDamageDisplay() {
       if (selectedAmmo) {
           damageDisplay.textContent = `Урон: ${damageValue}`;
           damageDisplay.classList.add("updated");
           setTimeout(() => damageDisplay.classList.remove("updated"), 400);
       } else {
           damageDisplay.textContent = "Урон: 0";
       }
   }
   function selectAmmo(ammo) {
       if (selectedAmmo === ammo) {
           selectedAmmo.classList.remove("active");
           selectedAmmo = null;
       } else {
           if (selectedAmmo) {
               selectedAmmo.classList.remove("active");
           }
           selectedAmmo = ammo;
           selectedAmmo.classList.add("active");
       }
       updateDamageDisplay();
   }
   ammo1.addEventListener("click", function () {
       if (!ammo1.classList.contains("disabled")) {
           selectAmmo(ammo1);
           ammo2.classList.toggle("disabled", selectedAmmo !== null);
       }
   });
   ammo2.addEventListener("click", function () {
       if (!ammo2.classList.contains("disabled")) {
           selectAmmo(ammo2);
           ammo1.classList.toggle("disabled", selectedAmmo !== null);
       }
   });

});