• Как постепенно уменьшать элемент при скролле?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    посчитали высоту страницы (hp), высоту окна (hw)
    получили максимальный скролл smax = hp - hw и минимальный smin = 0
    знаем начальный (hmax) и конечный (hmin) размеры целевого элемента
    получаем текущую величину скролла (s)
    вычисляем диапазоны изменений
    ds = smax - smin = smax
    dh = hmax - hmin

    отсюда вытекает что
    s / ds = h / dh , где h - приращение высоты целевого элемента

    =>

    h = hmax - (dh * s) / ds

    Если нужно увеличивать элемент, меняем последнюю формулу
    h = (dh * s) / ds + hmin

    Итоговый код (подробный)
    var element = document.getElementById('d');
    var hp   = document.body.scrollHeight,
        hw   = window.innerHeight,
        smax = hp - hw,
        smin = 0,
        hmin = 100,
        hmax = 300,
        ds   = smax - smin,
        dh   = hmax - hmin;
    
    window.addEventListener('scroll', function () {
        var s = window.pageYOffset; // current scrollTop
        var h = hmax - (dh * s) / ds;
    
        element.style.height = h + 'px';
    });


    Сокращенный
    var element = document.getElementById('d');
    var hmin = 100, 
        hmax = 300;
    
    window.addEventListener('scroll', function () {
        var s = window.pageYOffset; // current scrollTop
        var h = hmax - ((hmax - hmin) * s) / (document.body.scrollHeight - window.innerHeight);
    
        element.style.height = h + 'px';
    });


    И демо на фиддле
    Ответ написан
    Комментировать
  • Почему не меняется цвет?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Когда вы вызываете setColor, у вас выполняются только две строки кода
    gameColor = clr; // Меняем черный на зеленый
    сonsole.log("After: "+gameColor); // After: green

    Где работа с канвой? Почему она должна поменяться?

    App.js
    var game = new GameWindow(500,500, "canv"); // Функции-конструкторы принято именовать с большой буквы
    game.setColor("green"); // Присваиваем зеленый цвет


    Game.js
    function GameWindow(width, height, id){
    
      document.write("<canvas width="+width+" height="+height+" id="+id+"></canvas>"); // пиздец, конечно, ну да ладно =)
    
      this.canvas = document.getElementById(id);
      this.width  = width;
      this.height = height;
      this.color  = "black"; // initial color
      this.ctx    = this.canvas.getContext("2d");
    
      console.log("Before: " + this.color);
    
      this.fillCanvas();
    }
    
    GameWindow.prototype.fillCanvas = function(){
        this.ctx.fillStyle = this.color;
        this.ctx.fillRect(0,0, this.width, this.height);
    }
    
    GameWindow.prototype.setColor = function(color){
        console.log("After: " + color); // After: green
        this.color = color;  // Меняем черный на зеленый
        this.fillCanvas();
    }
    Ответ написан
    4 комментария
  • Отступ между верхним блоком и футером?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Это марджин от .entry-summary
    Есть такой баг.
    Пофиксите слопывание марджинов у верхнего блока любым способом
    Ответ написан
    1 комментарий
  • Откуда берётся белый фон?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Элементы уровня блок, не могут находится внутри параграфа. Посмотри в девтуле - там должно быть видно, что параграфа стало два в DOM дереве, до и после.
    Это если по простому.
    В современной спецификации немного более замороченные правила и типов элементов поболее, но суть не меняется - нельзя.
    Ответ написан
    3 комментария
  • Как при клике вне diva закрыть этот див?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Как открываешь, так и закрывать надо
    https://jsfiddle.net/DelphinPRO/cpss55r1/5/
    Ответ написан
    5 комментариев
  • Как увеличить елементы массива?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Array.prototype.map()

    let arr = createArr();
    let newArr = arr.map(val => val + 5);
    Ответ написан
    Комментировать
  • Как сделать социальный сайт и убить зайца с отсутствием навыка его разработки?

    delphinpro
    @delphinpro
    frontend developer
    Ну давайте попробую ответить на часть ваших вопросов )

    Начнем с главного
    Как их [frontend и backend] вообще связывать?

    Бэкенд - это то, что работает на сервере, фронтенд - то, что работает и отображается в браузере. Эти вещи разнесены в пространстве и времени. Общаются они между собой по протоколу http. Браузер отправляет запрос, сервер его получает, обрабатывает и выдает ответ браузеру. Тут вроде бы все должно быть понятно? Запрос-ответ в простом текстовом формате (http - hyper text transfer portocol). Вам этот протокол зубрить не нужно, браузер все делает сам. Просто для понимания.

    Как делать backend?

    Это просто программа на каком-то языке. Чаще всего php. Подавляющее большинство шаред-хостингов предоставляют вам именно php. Самый низкий порог вхождения у php. Вот и начинайте с php. Пусть говорят, что он "умирает", что php гавно, и т.д. Зато на нем можно в максимально короткие сроки запустить сайт человеку никогда этого не делавшего.

    Как выбирать хостинг

    Хостинг выбирают под сайт. Средне-статистический говносайтик (коих большинство в интернете) вполне себе нормально уживутся на дешевом шареде за 200-300 р/мес.
    Т.е. идете к любому хостинг-провайдеру и покупаете у него один из тарифов. Многие предлагают покупку и привязку домена, зачастую со скидкой. Вообще ничего настраивать не надо.

    и как вообще выглядит "загрузка" сайта на хостинг?

    У хостера вы получите данные для подключения к вашему серверу по (s)ftp/ssh, параметры доступа к базе данных и т.п.
    После того, как напишете свой сайт у себя на компьютере, вы просто откроете ftp менеджер и скопируете файлы в папку на сервере хостера.

    Какие технологии использовать?

    Вот тут интересно =) Технологий море. Океан. Для бекенда, для фронта, для разработки, для отладки, для тестирования, для деплоя... Нужны ли они все вам?
    Думаю на первом этапе не стоит зарываться и делать каждую мелочь по фен-шую. Закопаетесь с головой и не вылезете потом. Начинайте с самого простого - php на бекенде, jQuery на фронте, и простейший деплой по (s)ftp. Единственное, с чем стоит определиться сразу - это основа сайта. Будет это какая-то CMS или фреймворк - неважно. Лишь бы не самописное УГ.
    И контроль версий. Сразу осваивайте git.
    Остальное тлен. Потом приложится, когда будете получше во всем разбираться.
    Ответ написан
    Комментировать
  • Как сделать изменение цвета наведенной ссылки в данном случае?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Не нужно изменять стили всех ссылок. Всегда старайтесь управлять визуальным представлением через css классы. в данном случае достаточно переключать какой-то класс у самого меню (в примере - scrolled). И, соответственно, нужно описать в css стили ссылок без этого класса, и с ним. Всё просто.
    https://codepen.io/delphinpro/pen/jwqNpM
    Ответ написан
  • SASS. Можно ли в миксине опустить аргументы, чтобы были приняты те, что по умолчанию?

    delphinpro
    @delphinpro Куратор тега Sass
    frontend developer
    @include big(1, 2, $d: 4);
    Ответ написан
    Комментировать
  • Нужно детально понять простой код?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    $('#ddmenu li').hover( // обрабатываем событие :hover
      // В this у нас будет элемент li
    
      // Начинайте читать со второй функции, будет понятнее
    
      // функия выполнится при наведении мыши
      function () {
        // Достать из data-атрибута* ссылку на таймер и очистить его
        // Таким образом, если мы увели мышку с элемента, и тут же 
        // сразу навели обратно, не будет моргания выпадашки
        clearTimeout($.data(this,'timer'));
        // Выбираем ul внутри наведенного li
        // Останавливаем анимации, если они не успели закончится
        // И начинаем новую анимацию slideDown (показываем выпадашку)
        $('ul',this).stop(true,true).slideDown(200);
      },
    
      // функия выполнится при уходе мыши
      function () {
        // В this (элемент li) в data-атрибут* под именем timer запишем 
        // результат функции setTimeout (ссылка на таймер)
        $.data(this,'timer', setTimeout(
          // Proxy "протаскивает" контекст this внутрь функции
          $.proxy(
            function() { // Функция, внутрь которой пробросится контекст
                // Благодаря прокси здесь this по-прежнему указывает на li
                // Получается мы выбираем ul внутри наведенного li
                // Останавливаем анимации, если они не успели закончится
                // И начинаем новую анимацию slideUp (скрываем выпадашку, видимо)
                $('ul',this).stop(true,true).slideUp(200);
            },
            this // пробрасываемый контекст - наведенный элемент
          ),
          100 // таймаут, через 0.1 сек после ухода мыши выполнится функция закрытия
        ));
      }
    
    );


    * Не совсем верно. Данные пишутся не в data-атрибут. jQuery использует собственное хранилище данных. но сути это особо не меняет, а для понимания легче.
    Ответ написан
    1 комментарий
  • Как прерывает цикл?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Почему не прерывает? Вангую, что там только три алерта, а не девять.

    stop: for (var i = 0; i < arr.length; i++) {
        for (var n = 0; n < arr[i].length; n++) {
    
            if (n == 0) {
                alert(i);
                break stop;
            }
    
        }
    }
    Ответ написан
    Комментировать
  • Как добавить svg в уже созданный иконочный шрифт icomoon?

    delphinpro
    @delphinpro
    frontend developer
    https://icomoon.io/app/#

    Вы можете собрать свой набор, в том числе загрузить собственные svg иконки
    Ответ написан
    Комментировать
  • Почему тут ошибка?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    function declaration поднимается наверх скоупа, объявления тоже, а var объявляет локальную переменную

    Ваш код в представлении интерпретатора javascript:
    function f() { console.log(2) }
    (function() {
        var f;
        f(); // f локальная и  сейчас undefined
        f = function() { console.log(1) } // и только тут в нее пишется ссылка на функцию
    })();
    f();


    Второй вариант:
    function f() { console.log(2) }
    (function() {
        f(); // f функция из родительского скоупа
        f = function() { console.log(1) } // а тут она просто перезаписывается
    })();
    f();
    Ответ написан
    Комментировать
  • Насколько хорошо необходимо знать Webpack и Gulp в web-разработке?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    Webpack заморочен, а с переходом на вторую версию старые мануалы/курсы/скринкасты имеют неточности вроде бы в незначительных мелочах, а ведь не работает!
    Но когда вы поймете как он работает, как его настроить, он станет вам незаменимым помощником. Использовать разумеется сразу вторую версию.
    Отдельно webpack имеет смысл использовать для сборки SPA и только. Для верстки обычного сайта без помощи таск-менеджера вам не обойтись. И тут на сцену выходит простой и надежный gulp, который и изучать-то особо не надо (если вы конечно не полный чайник в javascript). Он вам и скрипты сбилдит, и стили скомпилирует, и картинки оптимизирует, и спрайты соберет... Список можно продолжать до бесконечности. Без преувеличения.
    Более того, gulp может для вас и webpack запустить, если хочется обрабатывать javascript-файлы именно им. Они прекрасно дружат вместе.
    И не нужно там ничего заучивать. Добавьте пару закладок на документацию в браузер, почитайте/посмотрите несколько уроков, чтобы понять как в принципе настраивать инструмент. Потом делайте себе конфиги, удачные сохраняйте и переиспользуйте, расширяйте.
    Ответ написан
    5 комментариев
  • Как можно оптимизировать код ajax отправки формы для многократного использования?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    $(function () {
        $('[data-toggle="ajax"]').on('submit', function (e) {
            e.preventDefault();
            let $form        = $(this);
            let $formLoading = $('.ajax-form__loading', $form);
            let $button      = $('[type="submit"]', $form);
    
            let data     = $form.serialize();
            let action   = $form.data('action') || $form.attr('action');
            let method   = $form.attr('method');
            let response = $form.data('response') || 'html';
    
    
            console.log('Response type: ', response);
    
            $button.attr('disabled', true);
            $formLoading.addClass('show');
            $form.trigger('beforeSend');
    
            $.ajax({
                url     : action,
                type    : method,
                data    : data,
                dataType: response
            }).then(function (data) {
                console.log('success', arguments);
                $formLoading.removeClass('show');
                $button.attr('disabled', false);
                $form.trigger('success', [data]);
            }).fail(function () {
                console.log('error', arguments);
                $formLoading.removeClass('show');
                $button.attr('disabled', false);
                $form.trigger('error');
            });
        });
    });
    Ответ написан
  • Есть ли html import для gulp который следит за изменениями импортируемых файлов (что то наподобе jade, но с html синтаксисом)?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    на подобие jade но с html синтаксисом

    gulp-twig

    Но проблема скорее всего в другом. Вам просто нужно отслеживать изменения во всей папке с html-исходниками и перезапускать таск сборки html. Тогда любой плагин подойдет. В т.ч. указанный вами. Ваша ситуация может возникнуть только если вы отслеживаете один файл или один уровень каталога, без вложенных.
    Ответ написан
    3 комментария
  • Как задать отступ?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Элементарно, Ватсон. Тыщи сеток построены по такому принципу:
    https://jsfiddle.net/o8qLL3aj/
    Ответ написан
    2 комментария