Задать вопрос
  • Как задать проверку в цикле?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Чтобы не дублировать код, имеет смысл сделать функцию, которая будет делать активным указанный слайд, и использовать её - и при кликах на .prev/.next, и при кликах на .dots. Как-то так:

    HTML
    <div class="slider-container">
      <div class="slider-item">
        <div class="slider-number">1/3</div>
        <img src="https://сезоны-года.рф/sites/default/files/images/shkolnikam/gora_2.jpg">
        <div class="slider-text">Горы</div>
      </div>
      <div class="slider-item">
        <div class="slider-number">2/3</div>
        <img src="https://lovingnewyork.com.br/wp-content/uploads/2015/10/brooklyn-bridge-park.jpg">
        <div class="slider-text">Мост</div>
      </div>
      <div class="slider-item">
        <div class="slider-number">3/3</div>
        <img src="http://fotorelax.ru/wp-content/uploads/2017/11/Sunset-in-Greenland-01.jpg">
        <div class="slider-text">Закат</div>
      </div>
      <a class="prev" data-change="-1">&#10094;</a>
      <a class="next" data-change="+1">&#10095;</a>
      <div class="dots">
        <span class="dot"></span>
        <span class="dot"></span>
        <span class="dot"></span>
      </div>
    </div>

    CSS
    body {
      background-color: #232323;
      color: #fff;
      margin-top: 50px;
    }
    
    .slider-container {
      max-width: 1200px;
      margin: auto;
      position: relative;
    }
      
    .slider-item {
      display: none;
    }
    
    .slider-item.slider-active {
      display: block;
    }
    
    .slider-item img {
      width: 100%;
    }
    
    .prev,
    .next {
      position: absolute;
      cursor: pointer;
      top: 50%;
      width: auto;
      margin-top: -22px;
      padding: 16px;
      color: #fff;
      font-weight: bold;
      font-size: 18px;
      transition: .6s;
      border-radius: 0 3px 3px 0;
    }
        
    .next {
      right: 0;
      border-radius: 3px 0 0 3px;
    }
    
    .prev:hover,
    .next:hover {
      background-color: rgba(0,0,0,0.8);
    }
    
    .slider-text {
      position: absolute;
      padding: 8px 12px;
      font-size: 16px;
      bottom: 60px;
      left: 50%;
      transform: translateX(-50%);
    }
    
    .slider-number {
      position: absolute;
      top: 30px;
      left: 30px;
    }
    
    .dots {
      text-align: center;
    }
    
    .dot {
      cursor: pointer;
      width: 13px;
      height: 13px;
      margin: 15px 2px;
      border-radius: 50%;
      display: inline-block;
      background-color: rgba(0, 0, 0, 0.8);
      transition: background-color 0.6s ease;
    }
    
    .active, .dot:hover {
      background-color: #717171;
    }

    JS
    const slider = document.querySelector('.slider-container');
    const sliderItems = document.querySelectorAll('.slider-item');
    const dots = [...document.querySelectorAll('.dot')];
    let slideIndex = null;
    
    slider.addEventListener('click', function({ target: t }) {
      if (t.matches('[data-change]')) {
        setActiveSlide(slideIndex + +t.dataset.change);
      } else if (t.matches('.dot')) {
        setActiveSlide(dots.indexOf(t));
      }
    });
    
    setActiveSlide(0);
    
    function setActiveSlide(index) {
      slider.querySelectorAll('.slider-active').forEach(n => n.classList.remove('slider-active'));
      slider.querySelectorAll('.active').forEach(n => n.classList.remove('active'));
    
      slideIndex = (index >= 0 ? 0 : sliderItems.length) + (index % sliderItems.length);
    
      sliderItems[slideIndex].classList.add('slider-active');
      dots[slideIndex].classList.add('active');
    }
  • Как задать проверку в цикле?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Конечно работает - ведь проверка на равенство в таком варианте тоже присутствует.
  • Как задать проверку в цикле?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Что значит "куда делся"? Не было его и быть не может. Или вас слово "уже" смущает? Так это сказано в том смысле что с индексом length - 1 ЕЩЁ есть, а с length УЖЕ нет. Смысловое ударение на индекс, а не на конкретный элемент.
  • Почему не могу установить значение?

    0xD34F
    @0xD34F Куратор тега React
    campus1, дополнил ответ.
  • Как при закрытии модального окна прятать input'ы?

    0xD34F
    @0xD34F
    Павел Воронюк, не знаю, что это может быть. Сам с таким иногда сталкиваюсь... при использовании Фаерфокса. Но поскольку пользуюсь в основном Хромом, никогда не интересовался, в чём причина.
  • Почему синхронный forkJoin работает некорректно?

    0xD34F
    @0xD34F Куратор тега JavaScript
    zlodiak, не говорите ерунды. 0 и 1 - это индексы. Соответственно, откуда там может 3 взяться, если у вас всего два потока? Или вы не знаете, что такое массив?
  • Как найти все input поля и очистить при клонировании Node?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Chvalov, ну, не найден элемент, querySelector вернул null. Может, потому что у элемента с input'ами отсутствует класс form-row-data? - я его в вашей демке добавил, чтобы можно было отличить строки с данными от строки с кнопками add и clear. Т.е. надо не только js подправить, но и html.
  • Как в Google Maps изменить маркер по клику на него?

    0xD34F
    @0xD34F
    Роман Кузнецов,
    Вот как у меня все устроено https://codepen.io/Cheizer/pen/wxMqLz

    замените
    i.addListener("click", function() {
      p.open(map, i)
      i.setIcon(i !== this ? iconDefault : iconActive);    
    })

    на
    o.marker = i;
    i.addListener("click", function() {
      p.open(map, i)
      locations.forEach(l => l.marker.setIcon(l.marker === this ? iconActive : iconDefault));
    })
  • Как сделать анимацию для "v-for" элемента с "v-if" условием в Vue?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Макс Шведов, канвас, просто великолепно. Канвас, который до сего момента вообще не упоминался.

    "Не отрисовывается" - в смысле, при смене списка? Ну так делайте watch на переменную, отвечающую за то, какой список отображается, и в обработчике вызывайте метод перерисовки.
  • Как сделать анимацию для "v-for" элемента с "v-if" условием в Vue?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Макс Шведов, не подскажу. Откуда мне знать, что это такое должно быть, зачем нужно и т.д.? - читать мысли не умею, извините.
  • Как выполнить computed только после выполнения функции?

    0xD34F
    @0xD34F Куратор тега Vue.js
    То есть, всё-таки в шаблоне выводите. И в чём проблема использовать v-if?

    UPD. А, и в computed тоже используете - ну так добавьте проверку, что объект есть, прежде чем его свойства читать.
  • Как лучше рендерить клеточный автомат?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Ди Ма,
    this.groups[this.matrix[y][x]].push(x, y); вынес в цикл, который в calc.

    Это зря - так вы смешиваете код, выполняющий разные задачи - расчёт новых состояний и рендеринг. Во-первых - сам по себе код становится более запутанным, сложным для понимания.

    А главное - совсем не обязательно, что каждое поколение клеток должно быть отрисовано. Представьте, что в будущем вы захотите добавить такую функциональность, как прокрутку на N поколений вперёд - типа, не хотите наблюдать за эволюцией, нужен только результат. Или возникнет необходимость реализовать отображение только одного поколения из двух или трёх или ... - для того же ускорения работы (не только, для этого есть и другие причины). В этом случае группировка клеток, выполняемая вместе с расчётом новых состояний отрицательно скажется на производительности.
  • Как выполнить computed только после выполнения функции?

    0xD34F
    @0xD34F Куратор тега Vue.js
    beduin01,
    Я не могу понять. Почему если я в my_data закину объект, то все работает как надо.

    Гм-гм... А зачем вы, не зная языка, лезете фреймворки использовать?

    "В my_data" - можете, всё-таки в my_dates? - кажется, так свойство у вас называется в вопросе. Почему работает... Лучше зайти с другого конца - почему не работает, когда my_dates пустой. При попытке прочитать свойство '2018-04-23' возвращается значение undeifned, потому что запрошенного свойства у объекта нет. Затем вы пытаетесь у полученного значения прочитать ещё какие-то свойства - но у undefined никаких свойств нет и быть не может, попытка обратиться к какому-либо свойству undefined приводит к ошибке. Ну, такая вот особенность языка.

    Меня устроит любой даже блокирующий вариант.

    Это говнокодерство. А больше мне вам сказать нечего - раз уж вы решили проигнорировать мой вопрос о том, как вы используете myvalue.
  • Как лучше рендерить клеточный автомат?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Ди Ма,
    Ну, для начала разберём всего одну строку:
    this.ctx.fillStyle = this.memory[y][x] === 0 ? '#0d2a37': '#CCC';

    Почему memory[y][x] === 0 ? бла-бла-бла (и почему memory, а не matrix? - отрисовывать надо новое состояние, а не прошлое)? Неужели количество доступных состояний у вас ограничено всего лишь двумя? А как же картинка из вопроса, где есть клетки в шести различных состояниях? Лучше сделайте объект, где ключ - состояние, а значение - цвет:
    var colors = {
      0: какой-то цвет,
      1: ещё какой-то цвет,
      2: и ещё,
      3: да сколько угодно,
      ...
    };

    Тогда установка цвета будет выглядеть так:
    this.ctx.fillStyle = colors[this.matrix[y][x]];

    Кстати, установка цвета - операция не самая быстрая, есть смысл выполнять её как можно меньшее количество раз. Добиться этого можно предварительно сгруппировав клетки по состояниям. Делаете массив, элементы которого тоже будут массивами:
    var groups = [...Array(numCellStates)].map(() => []);

    При обходе матрицы вместо рисования клетки кладёте её индексы в соответствующий её состоянию массив:
    groups[this.matrix[y][x]].push(x, y);

    После того, как все клетки будут раскиданы по группам, обходите группы и отрисовываете их содержимое:
    for (var state = 0; state < groups.length; state++) {
      this.ctx.fillStyle = colors[state];
    
      var cells = groups[state];
      for (var i = 0; i < cells.length; i += 2) {
        this.ctx.fillRect(cells[i] * this.coefX, cells[i + 1] * this.coefY, this.coefX, this.coefY);
      }
    }
  • Как лучше рендерить клеточный автомат?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Ди Ма,
    Рисовать только "живые" клетки на "мертвом" фоне.

    Нет разницы между "живыми" и "мёртвыми" клетками - ведь это просто условные наименования для клеток, находящихся в том или ином состоянии.

    По сути, вы хотите не отрисовывать клетки, находящиеся в каком-то определённом состоянии. Как это возможно, не очень понятно - если "живая" клетка стала "мёртвой", это надо как-то отобразить. Не рисовать - не получится, ведь иначе может оказаться так, что реальное и отображаемое состояния клетки будут отличаться.

    Рисовать только изменившиеся клетки.

    Это хорошая мысль. Правда, тут есть недостаток - скорость рисования получается переменной, в зависимости от количества клеток, изменивших своё состояние. И при большом размере матрицы эта переменность может быть очень хорошо заметна пользователю.

    Есть еще идеи?

    Покажите получившийся код отрисовки с помощью канваса. Нет, я конечно примерно представляю, каков он, но если покажете, мне будет проще объяснять, что можно сделать.