Задать вопрос
Ответы пользователя по тегу JavaScript
  • В чем главный смысл import export в es6?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Концепция модулей как способа организации JavaScript-кода

    Что такое модуль?
    Модуль — это переиспользуемая часть кода, содержащая в себе детали реализации и предоставляющая открытое API, что позволяет легко загрузить её и использовать в другом коде.

    Технически код можно написать и без использования модулей. Модули — это паттерн, который в разных формах и на разных языках используется разработчиками с 60-х и 70-х годов.
    В идеале, модули JavaScript позволяют нам:
    • абстрагировать код, передавая функциональные возможности сторонним библиотекам, так что нам не придётся разбираться во всех сложностях их реализации;
    • инкапсулировать код, скрывая его внутри модуля, если не хотим, чтобы его изменяли;
    • переиспользовать код, избавляясь от необходимости писать одно и то же снова и снова;
    • управлять зависмостями, легко изменяя зависимости без необходимости переписывать наш код.
    tproger
    или
    learn.javascript.ru
    Ответ написан
    3 комментария
  • Как сделать меняющийся video background?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    1. В чем проблема из двух сделать одно длинное видео с вашим красивым переходом? Или Вам надо поизвращаться?
    2. Сделайте N блоков поверх друг друга(через position: absolute и z-index). Каждый блок имеет свое видео. Когда первое видео заканчивается плавно анимируйте этот слой в opacity: 0(в jq это через .hide() делается), а следующий за ним в opacity: 1(в jq .show())
    3. Хочется быть крутым? Делайте через canvas(pixi.js). Переход сделать через displacement map
    Ответ написан
    Комментировать
  • Как можно сократить код и сделать его универсальным?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    jsfiddle.net/75cot643/1
    jsfiddle.net/75cot643/2

    createMonth - создает сетку для даты, которую в нее передают.

    const getFirstDateofMonth = date => new Date(date.getFullYear(), date.getMonth(), 1).getDay();
    const getDaysInMonth = date => new Date(date.getFullYear(), date.getMonth()+1, 0).getDate();
    const createMonth = (date, el) => {
      const startFrom = getFirstDateofMonth(date); // Return the number of the first day
      const daysAmount = getDaysInMonth(date); // Return the number of days in the month
      for (let i = 1; i < startFrom+daysAmount; i++) {
        const li = document.createElement('li');
        // Colorize cells
        if (i < startFrom) {
          li.classList.add('past');
        } else {
          li.classList.add('current')
        }
        el.appendChild(li);
      }
    }
    
    const calendar = document.getElementById('calendar'); // Container
    const date = new Date(Date.now()); // Date
    /*
      date - some date in format:
        - new Date('November 17, 1995 03:24:00')
        - new Date(Date.now())
        - new Date('1995-12-17T03:24:00')
        - .... 
      calendar - DOM element
    */
    createMonth(date, calendar);

    ps и стоит отметить решением ответ Макс к Вашему предыдущему вопросу.
    Ответ написан
  • Как сделать что бы foreach js перебирал элементы другим способом?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    <div class="js-courses-type" data-loop="4"></div>
    <div class="js-courses-type" data-loop="2"></div>
    <div class="js-courses-type" data-loop="1"></div>
    <div class="js-courses-type" data-loop="3"></div>
    <div class="js-courses-type" data-loop="5"></div>

    const courses = [...document.querySelectorAll('.js-courses-type')].sort((a, b) => a.getAttribute('data-loop') - b.getAttribute('data-loop'));
    courses.forEach( course => window.console.log(course));

    5c0ceec2f2b6c987661455.png
    Нужны пояснения?
    Ответ написан
    1 комментарий
  • Как сделать такую анимацию?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    У Вас есть путь из точек(svg path). На примере 1 из линий с сайта https://slides.com
    <path class="path-2" d="M0,400 L 1000,400 1000,445 S 500,420 0,480 Z" fill="#2b81bf"></path>

    Это конечное состояние точек. Вот это начальное:
    <path class="path-2" d="M0,400 L 1000,400 1000,500 S 500,500 0,500 Z" fill="#2b81bf"></path>

    Теперь по событию page load анимируйте атрибут d из начального состояния в конечное.
    Можно делать через requestAnimationFrame(), если позволяют знания. На каждом шаге добавлять N к координате точки.
    let i = 0;
    (function loop() {
      i++;
      path.setAttribute('d', `M0,400 L 1000,400 1000,445 S ${i},420 0,480 Z`);
      if (i === 500) return
      window.requestAnimationFrame(loop);
    })();

    Что-то такое. Примеров в интернете куча: https://medium.com/@bdc/gain-motion-superpowers-wi...

    Или используйте библиотеки, которые позволяют это делать более простым способом:
    1. AnimeJS
    2. greensock
    3. SnapSvg
    4. ...


    update:
    https://youtu.be/qtZ_ISUOzhI в свое время понравилось объяснение от этого парня. На видео он делает другую трансформацию, но идея точно такая же. Просто изменить под Ваши нужды.
    Ответ написан
    Комментировать
  • Замена onmousemove?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Читайте внимательно доки. Как
    При быстром движении мыши события mouseover, mousemove, mouseout могут пропускать промежуточные элементы.
    связано с Вашей задачей и кодом? Вот вам пример "лупы" link. Есть какие-то "скачки"? Код по ссылке предоставлен - исправляйте свой.

    Если не нравится onmousemove, то можно использовать requestAnimationFrame().
    По onmouserenter запускайте raf, который будет на каждом шаге проверять положение мыши. По onmouseleave отменяйте raf(cancelAnimationFrame())
    Ответ написан
    Комментировать
  • Как сделать такой слайдер?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    1. Он делается путем манипуляции с html, css и js.
    2. На офф странице слйдера "slick slider" есть точно такой пример(Center Mode)
    3. Да
    Ответ написан
    1 комментарий
  • По JS немного переделать функцию?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    document.getElementById('overlay').style='visibility:hidden;opacity:0;transition:all 0.7s ease-out 0s';

    Это кусок кода, который отвечает за закрытие окна, так?
    Ну и замените: th.trigger("reset"); на код выше
    ....
    $('#thanks').fadeIn(500);
    setTimeout(function() {
        // Done Functions
        // th.trigger("reset");
        document.getElementById('overlay').style='visibility:hidden;opacity:0;transition:all 0.7s ease-out 0s';
    }, 1000);

    Ну или в любое другое место где Вам надо
    Ответ написан
    1 комментарий
  • Получение данных из XML для чайников?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    "им нельзя обработать на стороннем сервере документ" Что вообще это значит?
    В чем состоит задача?
    Получить файл? jQuery.ajax() (vanilla XMLHttpRequest)
    Распарсить файл? jQuery.parseXML() (vanilla your_parser)
    Ответ написан
  • Почему при вычитании parseInt работает с числами как надо, а при сложении parseInt не учитывается и переменные конкатенируются?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Вы неправильно используете функцию parseInt. Она возвращает целое число в соответствии с указанным основанием системы счисления. Следовательно Вам надо сохранить это число в какую-то переменную:
    const countInt = parseInt(count);
    // or
    const count = parseInt($( "#add_favorite_video_lbl" ).text());

    После чего уже использовать.

    Что касается Вашего кода:
    JS язык программирования с динамической типизацией. Поэтому он сам автоматически приводит переменные к одному типу(если такое возможно). От чего в первом примере он складывает строки, а во втором (из-за того что не может вычесть из строки) переводит строку в int самостоятельно
    Ответ написан
    Комментировать
  • Откуда взялся в цикле параметр?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    The arguments object

    arguments is an Array-like object accessible inside functions that contains the values of the arguments passed to that function.

    Пояснить?

    ps RU - https://learn.javascript.ru/arguments-pseudoarray
    Ответ написан
    2 комментария
  • Как сделан этот эффект шума?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Вот плагин, который использует автор.

    Вот код который отвечает за подгрузку картинок:
    // Glitch Header /////////////////////////////////////////////////////////////////////
    
    $(function(){
    
    	var imgContainerEl = $('#img-container');
    	var imagePath = template_directory_uri + '/images/' + imgContainerEl.attr('bg-glitch');
    
    	function loadImage(src) {
    		var imageEl = new Image();
    		imageEl.onload = function () {
    			changeGlitch(imageEl);
    		};
    		imageEl.src = src;
    	}
    
    	function changeGlitch(img) {
    		var params = glitches[getRandomInt(0, glitches.length - 1)];
    		glitch(params)
    			.fromImage(img)
    			.toDataURL()
    			.then(function(dataURL) {
    				var imageEl = new Image();
    				imageEl.src = dataURL;
    				imgContainerEl.css('background-image', 'url(' + imageEl.src + ')');
    				imgContainerEl.css('background-size', 'cover');
    
    				setTimeout(function(){
    					imgContainerEl.css('background-image', 'none');
    				}, 1000);
    				setTimeout(function(){
    					imgContainerEl.css('background-image', 'url(' + imageEl.src + ')');
    					imgContainerEl.css('background-size', 'cover');
    				}, 1050);
    				setTimeout(function(){
    					imgContainerEl.css('background-image', 'none');
    				}, 1100);
    
    				setTimeout(function(){
    					loadImage(imagePath);
    				}, getRandomInt(2000, 10000));
    			});
    	}
    
    	loadImage(imagePath);
    
    });

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

    ps если Вам только шум нужен, то можете бекграудом положить png шум. И анимировать его через keygrames
    Ответ написан
  • Значение 0 по дефолту в input?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Мне вот интересно, на сколько быстрей написать свой вопрос на каком-то форуме, чем зайти в доки и исправить самому?
    <input
      type="text"
      class="form-control text-center"
      value="0"
      data-max="200"
      data-min="0"
      data-step="1">

    quantity: { min: 0, max: 999, step: 1, precision:0 },
    Ответ написан
    8 комментариев
  • Что из этого невозможно создать на css?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Выражайте цели более конкретно... В зависимости от них и будет ясна возможность.
    Для примера в первом пункте можно использовать :target jsfiddle.net/84hj53u9 Или использовать input radio

    2 и 3 пункт это обычный :hover

    3. Можно придумать сетку из квадратов(4x4, 8x8 в зависимости от точности). Если мы наезжаем на какой-то квадрат(:hover), то определенный элемент, который привязан к этому квадрату, анимируется. Извращение - да, но работает без JS. jsfiddle.net/znr6k1c3 (если сделать сетку больше, то и контроля будет больше)

    4 и 5 Была какая-то новая api(в очень сырой пре-альфа), которая отвечала за появление во вью элемента. Не могу вспомнить(мб путаю с js)... Поддержки никакой, но Вы ничего не пояснили для чего надо.

    6. Создаете @keyframes, который будет анимироваться при загрузке контента: jsfiddle.net/6yh0g82w

    7. Нет

    Все это извращение, которое не имеет смысла. Если у вас задача сделать проект без js, то и анимация не нужна. Ибо задача совсем в другом состоит. А для всего остального давно уже придумали GSAP, animejs и etc
    Ответ написан
    1 комментарий
  • Как сделать дополнительную прокрутку дублирующую вертикальную?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Link
    $(document).on('ready', function() {  
      var winHeight = $(window).height(), 
          docHeight = $(document).height(),
          progressBar = $('progress'),
          max, value;
    
      /* Set the max scrollable area */
      max = docHeight - winHeight;
      progressBar.attr('max', max);
    
      $(document).on('scroll', function(){
         value = $(window).scrollTop();
         progressBar.attr('value', value);
      });
    });


    progress {
      /* Positioning */
      position: fixed;
      left: 0;
      top: 0;
    
      /* Dimensions */
      width: 100%;
      height: 5px;
    
      /* Reset the appearance */
      -webkit-appearance: none;
         -moz-appearance: none;
              appearance: none;
    
      /* Get rid of the default border in Firefox/Opera. */
      border: none;
    
      /* Progress bar container for Firefox/IE10+ */
      background-color: transparent;
    
      /* Progress bar value for IE10+ */
      color: red;
    }
    
    progress::-webkit-progress-bar {
      background-color: transparent;
    }
    
    progress::-webkit-progress-value {
      background-color: red;
    }
    
    progress::-moz-progress-bar {
      background-color: red;
    }


    Все! На codepen сей код в работе
    Зачем для 3+\- строчек искать плагин?

    Пусть будет этот, если не хотите сами думать: https://github.com/kunukn/reading-position-indicator
    Ответ написан
    Комментировать
  • Точный аналог setTimeout. Как вызвать выполнение функции через точный промежуток времени?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    Чем Вас не устраивает video.currentTime или еще точнее надо?
    const video = document.getElementById('video');
    video.ontimeupdate = function() {
      window.console.log(video.currentTime);
    };


    Out:
    9.643231
    9.893151
    10.143168
    10.393094
    10.643828
    10.893123
    11.1771
    11.39276


    Проверяйте. Останавливайте

    ps
    Через requestAnimationFrame можно:
    function update(t) {
      window.console.log(t);
      window.requestAnimationFrame(update);
    };
    
    update();
    Ответ написан
    2 комментария
  • Как запретить переход к следующему вопросу на квизе, если ничего не было выбрано или не введено?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    В чем проблема проверять input на значение?

    $('#submit').click(function(){
       if($.trim($('#myInput').val()) == ''){
          alert('Input can not be left blank');
       }
    });


    Для radio button
    if($('#radio_button').is(':checked')) { 
        alert("it's checked"); 
    }
    Ответ написан
  • Вывести ошибку валидации Express в шаблон HBS?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    // ...rest of the initial code omitted for simplicity.
    const { check, validationResult } = require('express-validator/check');
    
    app.post('/user', [
      // username must be an email
      check('username').isEmail(),
      // password must be at least 5 chars long
      check('password').isLength({ min: 5 })
    ], (req, res) => {
      // Finds the validation errors in this request and wraps them in an object with handy functions
      const errors = validationResult(req);
      if (!errors.isEmpty()) {
        return res.status(422).json({ errors: errors.array() });
      }
    
      User.create({
        username: req.body.username,
        password: req.body.password
      }).then(user => res.json(user));
    });


    {
      "errors": [{
        "location": "body",
        "msg": "Invalid value",
        "param": "username"
      }]
    }


    return res.status(422).json({ errors: errors.array() });
    errors.array() - ваши ошибки. Передавайте их в шаблон свой - res.render('home', {errors: errors.array()});

    {{# if errors }}
        {{# each errors }}
              <p class="alert alert-danger">{{ this.msg }}</p>
        {{/each}}
    {{/if}}
    Ответ написан
    5 комментариев
  • Как проверить, что дата входит в указанный диапазон?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    let uno = new Date("Sat Aug 18 2018 00:00:00 GMT+0300").getTime();
    let dos = new Date("Mon Aug 20 2018 00:00:00 GMT+0300").getTime();
    let tres = new Date("Sun Aug 19 2018 00:00:00 GMT+0300").getTime();
    
    if ( tres > uno && tres < dos) {
      // do something
    }


    ps работает и без getTime()
    let uno = new Date("Sat Aug 18 2018 00:00:00 GMT+0300");
    let dos = new Date("Mon Aug 20 2018 00:00:00 GMT+0300");
    let tres = new Date("Sun Aug 19 2018 00:00:00 GMT+0300");
    
    if ( tres > uno && tres < dos) {
      // do something
    }
    Ответ написан
    Комментировать