Несколько скриптов или один? Может ли он поддерживать дубликаты?

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

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

Сначала я собирался стиснуть зубы и просто сделать 3 очень похожих функции: одну для здоровья, одну для брони и одну для энергии. Но так как у меня есть 5 игроков, и я хочу, чтобы одна страница обновляла их всех, это означало бы создание 15 скриптов, которые действительно избыточны.

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

Чтобы было проще увидеть, я настроил JSfiddle: https://jsfiddle.net/nekollx/7o3bdwyt/3/

В сторону: я только что заметил по какой-то причине, когда вы открываете скрипку, она не показывает CSS, поэтому она включена ниже

      body {
          margin: 0px 0px 0px 0px;
          padding: 0px 0px 0px 0px;
      }

hr {
  display: block;
  margin-top: 0.5em;
  margin-bottom: 0.5em;
  margin-left: auto;
  margin-right: auto;
  border-style: inset;
  border-width: 4px;
}

      .CharInfo {
        -webkit-transform: rotate(-180deg);
        -moz-transform: rotate(-180deg);
        -o-transform: rotate(-180deg);
        transform: rotate(-180deg);
        -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
        filter: progid: dximagetransform.microsoft.basicimage(rotation=2);
        font-weight: bolder;
        color: white;
        -webkit-text-stroke: 0.05em #000;
        font-size: x-large;
        padding: 0px 0px 0px 10px;
      }

      .line {
        width: 200px;
      }

      .stripesLoader {
        margin: 4px;
        height: 30px;
        position: relative;
        background: linear-gradient(90deg, #eee 50%, transparent 50%);
        background-color: crimson;
        background-size: 200%;
        background-position: 80%;
        width: 50%;
        border-radius: 5px;
        transform: scale(-1);
        transition: 0.3s;
      }

      .stripesLoader: before {
        content: "";
        position: absolute;
        width: 50%;
        height: 100%;
        border-radius: 5px;
        background:
        linear-gradient(
          45deg,
          transparent 25%,
          rgba(238, 238, 238, 0.5) 25%,
          rgba(238, 238, 238, 0.5) 30%,
          transparent 30%,
          transparent 35%,
          rgba(238, 238, 238, 0.5) 35%,
          rgba(238, 238, 238, 0.5) 70%,
          transparent 70%
        );
        animation: shift 2s linear infinite;
        background-size: 60px 100%;
        box-shadow:
          inset 0 0px 1px rgba(0, 0, 0, 0.2),
          inset 0 -2px 1px rgba(0, 0, 0, 0.2);
      }

      @keyframes shift {
        to {
          background-position: 60px 100%;
        }
      }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поскольку элемент progress, по-видимому, является элементом, который предшествует соответствующему элементу ввода, вы можете использовать метод jQuery prev.

Я не проверял это, но что-то вроде этого:

function update(target) {
    var $progress = $(target).prev();
    // ...

    $progress.css('backgroundPosition', valeur+'%');

    if (valeur <= 25){
        $progress.css('backgroundColor', 'red');
    } 
    // .... etc
}
Ответ принят как подходящий

Хорошо, я думаю, что получил ваш ответ!

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

  1. Я завернул ваш плеер в div: <div id='player0'>

  2. Я изменил ваше значение jq, чтобы оно разделялось для каждого HP, брони и энергии (jqValueHP, jqValueArmor, jqValueEnerg).

  3. Создал функцию playerclone, которая клонирует ваш player0 div и меняет его идентификатор для следующего индекса.

  4. Добавьте кнопку, чтобы создать больше игроков, которые будут вызывать playerclone и увеличивать счетчик игроков.

Вот рабочий пример!

Обновлено: Я сделал новую скрипту для полей xxx и yyyздесь. Обратите внимание, что поле xxx всегда будет иметь значение, которое вы установили для первого игрока для любого другого игрока (поскольку мы клонируем div).

Что касается анимации, мне кажется, все в порядке. У связанной вами скрипки не было CSS, поэтому обычно она не показывает анимацию...

это работает довольно хорошо, единственное, что, кажется, не работает, - это меньшая функция визуального отображения текущих/максимальных значений (xxx/yyy с интервалами), честно говоря, это незначительная проблема. Но я замечаю одну вещь: это кажется, когда вы обновите его, полосы теряют анимацию jsfiddle.net/nekollx/7o3bdwyt

NekoLLX 15.03.2019 18:51

Я действительно заметил некоторые ошибки CSS на скрипке, возможно, что-то пропустил, когда скопировал ваш код. Все исправил, теперь должно работать нормально.

H. Figueiredo 15.03.2019 23:02

да, это исправлено, но рабочий пример, кажется, ведет себя странно, когда я загружаю ее сам, она показывает java со ссылкой для j query, но ссылка Css и jquery не загружается, когда я обращаюсь к ней как к ссылке, но у вас есть плавник. оба счета .... странно

NekoLLX 16.03.2019 04:25

Извините, меня не было на выходных. Я не понимаю, что вы имеете в виду. Если вам нужен рабочий jFiddle, просто используйте мой. Если у вас возникли проблемы с импортом решения в ваш код, мне нужно немного больше контекста для вашего кода.

H. Figueiredo 18.03.2019 10:18

нет, он работает, но по какой-то причине моя JS-рабочий пример для него не загружает CSS и Javascript, когда я пытаюсь получить к нему доступ, например, как здесь, в stackoverflow. Но на мой счет все нормально

NekoLLX 20.03.2019 04:04

Другие вопросы по теме