• Узнать есть повторы в массиве?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Один раз пойти по элементам с конца в начало,
    брать id очередного и искать с таким же id в массиве слева направо,
    если нашёлся под другим индексом, нежели текущий — баста, есть дубли!
    const hasDupes = (arr) => {
      for (let i = arr.length - 1; i >= 0; i--) {
        if (i !== arr.findIndex((el) => arr[i].id === el.id))
          return true;
      }
      return false;
    }
    Ответ написан
    4 комментария
  • Узнать есть повторы в массиве?

    Вариант 1
    https://developer.mozilla.org/en-US/docs/Web/JavaS... внутри накапливать id которые встречаются.
    Недостаток - reduce перебирает весь массив, если вы уже нашли повтор и вам не нужно искать дальше, он все равно пройдется по остальным елементам
    Вариан 2 - https://developer.mozilla.org/en-US/docs/Web/JavaS...
    ID которые уже встречались в массиве нужно сохранять во внешнем накопителе но он перебирает массив до первого true
    Ответ написан
    Комментировать
  • Узнать есть повторы в массиве?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Простейший способ - запоминаем использованные айдишки в отдельном объекте и проверяем, повторилось ли.

    const test = [{
        name: 'name1',
        id: 1
      },
      {
        name: 'name2',
        id: 1
      },
    ];
    
    function checkForRepeatIDs(arr) {
      const memo = {};
    
      for (let item of arr) {
        const { id } = item;
        if (memo[id]) return true;
        memo[id] = true;
      }
    
      return false;
    }
    
    console.log(checkForRepeatIDs(test)); // true
    Ответ написан
    3 комментария
  • Какие библиотеки для таких решений вы знаете?

    YavaDev
    @YavaDev
    1 - Скорее всего такой плагин вы не найдете и надо писать самому. Но есть вот такой сайт https://tympanus.net/codrops/. Там постоянно выкладывают интересности с демками и кодом, похожие на этот слайдер.
    2 - Думаю с этим может легко справиться плагин - https://scrollmagic.io/.
    3 - Почти уверен, что такое можно сделать с помощью CSS, а именно position: sticky;. Ну а если нет, тогда scrollmagic думаю сможет.
    4 - А тут точно уверен, что position: sticky; сможет так сделать и не нужны здесь дополнительные плагины.
    Ответ написан
    Комментировать
  • Какие библиотеки для таких решений вы знаете?

    Mirami97
    @Mirami97
    студент
    Для 4 подойдет https://github.com/emn178/jquery-stickit
    Ответ написан
    Комментировать
  • Как сделать такого рода эффект?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    не могу найти в поиске

    SVG-маски, маски с помощью clip-path в CSS, маски на канвасе, маски в шейдерах, и.т.д. В общем гуглите все, что связано со словом "маска". Вариант с шейдерами самый производительный, с SVG - самый простой.

    Пример с SVG:


    Пример с шейдерами (не совсем такой, но для передачи идеи пойдет):
    Ответ написан
    Комментировать
  • Как растянуть круг path по периметру квадрата?

    f3d0t
    @f3d0t
    <svg style="border: 1px solid #000" width="130" height="130" viewBox="0 0 130 130" >
      <defs>
        <path 
              d="M65,65m-50,0a23,23 0 1,1 103,0a23,23 0 1,1 -103,0" fill="transparent" id="tophalf"/>
      </defs>
      
      <circle cx="50%" cy="50%" r="6" fill="#4C6492"/>
      
      <text style="font-size: 14px;" dx="0" letter-spacing="5.7">
        <textPath xlink:href="#tophalf">
          memories that last fomaking
        </textPath>
      </text>
    </svg>
    Ответ написан
    4 комментария
  • Идеальный алгоритм вёрстки сайта?

    delphinpro
    @delphinpro Куратор тега Вёрстка
    frontend developer
    В целом согласен. До пункта №7.

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

    1. Базовые элементы. Общая типографика, кнопки, ссылки и т.п.
    2. Общие блоки. То что повторяется на нескольких страницах и/или может быть переиспользовано, какие-то виджеты, менюшки, и т.п.

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

    Для этого всё закидываю на гитхаб-пейдж, чтобы по ссылке я мог открыть с телефона или попросить знакомого проверить на другой ОС c телефона


    Это лишняя трата времени. Пусть небольшая, но все же. Плюс, отслеживать качество верстки все-таки удобнее в процессе, а не по окончании подкручивать.
    Поэтому используем browser-sync. Поднимается сайт, доступный по IP в домашней локалке с любого устройства. Совет: использовать всегда один порт в browser-sync, а на устройствах сделать закладки на этот адрес. Любой сайт, который в данное время разрабатывается, открывается одним тапом по закладке.
    Кроме того BS дает бонус в виде синхронизации действий сразу на всех устройствах: клики, прокрутка, ввод. Это мега-удобно — кликаешь на компе, краем глаза смотришь в планшет и телефоны, сразу видишь там все изменения и поведение.

    Всё готово, сжимаю CSS, JS. через веб-сервисы.


    Опять тратите время. Настроенный Gulp в одну команду проделает все оптимизации (на больших проектах даже кофе можно успеть сделать, пока собирается билд=).

    Еще обратите внимание на инструмент lighthouse в инструментах разработчика.

    скриншот
    608fcaa260f31153020142.png


    Не нужно никуда сайт заливать, чтобы проверить на доступность, производительность и т.п.

    Про CMS ничего не скажу. Клиенту удобнее кнопочки тыкать в условном вордпрессе.

    Я не упомянул SASS-фигас и т. д, так как не увидел практической пользы для проектов на 1-15 страниц.


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

    Ну вот зачем PUG? Как конкретно он помогает на небольших проектах 1-15 шаблонов страниц.


    Помогает. Нет, конкретно Pug я очень не люблю. Но другой, более "хэтээмэльный" шаблонизатор бывает полезен. Я уже упомянул выше о верстке независимыми блоками. Шаблонизатор позволит не копипастить эти блоки, а использовать их как компоненты.

    Префиксы? В кодовом редакторе они и так есть.


    Я считаю, что исходный код должен быть чистым, без префиксов. Это лишний визуальный мусор. Пусть лучше автопрефиксер этим занимается. К тому же этот плагин использует актуальную базу caniuse на основе вашего .browserlist. Пусть профит и не большой, но все же поменьше на выходе неактуальных свойств.
    Ответ написан
    2 комментария
  • Какой MacBook лучше выбрать для Frontend-разработчика?

    lamer350
    @lamer350
    กำลังสูงสุด
    Отвечая на ваш прямой вопрос: "хватит для Air для такой работы" - отвечу (как и многие) что хватит, в этом нет сомнений.
    Но к делу нужно подходить по другому, тем более для основного рабочего устройства. Да сейчас это устройство - это минимум, он будет работать на все 100% своей мощности и стоимости. Но как быстро вы захотите что то помощнее?
    Ведь все мы люди разные и судим через призму своего восприятия, у меня 15ка 16го года с 16Gb Ram и мне ее жуть ка мне хватает, уже не дождусь когда обновлюсь на 18й год с 32gb. Хотя в большей степени я так же занимаюсь front-end разработкой.
    Я бы на вашем месте выделил некие критерии для себя, которые вам важны. Ниже пищу для размышления подкину:
    1. На 15ке я делю экран на 2 части когда пишу код (2 колонки), с 13кой все же мало места.
    2. Air все же очень слаб процессором, скорее всего вам понадобится виртуалка винды чтобы тестить код. На 2х ядерном процессоре и 8Gb рам это будет то еще испытание, особенно если при этом не вырубать фотошоп)
    3. Atom самый прожорливый редактор (на мак, если не брать во внимание adobe), а если вы используете IDE - процессора Air будет маловато...
    4. Хотите ли вы играть в 21 или нормально работать? Честно, я свою прошку 13ку (15го года, с 8Gb Ram) отдал жене (она копирайтер, контент менеджер), у нее открыт фотошоп, несколько браузеров и десятки вкладок, а так же word - даже ей его не хватает.

    Потому я никому из разработчиков не советую 13ку даже прошку, потому что ее реально не хватает. Но я просто не выношу когда машина не поспевает за мной и мне приходится ее ждать или принимать какие то решения отвлекающие от задач (что закрыть, что лишнее удалить и тп).
    Но настало время когда 13ка PRO мощнее 15ки PRO 17го года, это 13ка 18го года в стоке но именно с тачбаром, так как только их обновили. Теперь уже каждый может выбрать что ему нужнее, компактность или экран побольше.
    Air - я бы вообще не рассматривал как рабочий интрумент для программиста, это для серфинга в интернете, почту проверить. Хоть и обновили Air впервые за 7 лет, но он не стал мощнее... Конечно не у всех не ограничены ресурсы, потому важно понимать что если вы все же купите Air - то в скором времени нужно будет обновится ибо вам его будет не хватать, после того как привыкните к устройству.
    Ответ написан
    Комментировать
  • Как настроить browsersync для wordpress?

    serii81
    @serii81 Автор вопроса
    Я люблю phр...
    Сделал я для себя такой шаблон.
    Создал папку gulp, она находится на одном уровне со всеми проектами.
    Захожу в ней и запускаю команду gulp.
    И теперь, при изменении файлов php, scss, css, js, браузер с задержкой в 2000ms перезагружается.
    Задержка нужна, так как я работаю в шторме и нужно запулить изменения на сервер.
    Вот содержимое gulpfile.js
    'use strict';
    
    let gulp = require('gulp'),
    	//css
    	// stylus = require('gulp-stylus'),
    	sass = require('gulp-sass'),
    	autoprefixer = require("gulp-autoprefixer"),
    	sourcemaps = require('gulp-sourcemaps'),
    	wait = require('gulp-wait'),
    	notify = require("gulp-notify"),
    	plumber = require("gulp-plumber"),
    	browserSync = require('browser-sync').create(),
    	replace = require('gulp-replace');
    
    let siteUrl = 'http://wc-estore.host1670806.hostland.pro/';
    let siteDir = '../wc-estore/';
    
    gulp.task("scss", function () {
    	return gulp.src(siteDir + 'assets/scss/my.scss')
    		// .pipe(plumber())
    		.pipe(sourcemaps.init())
    		.pipe(wait(500))
    		.pipe(sass({
    			outputStyle: 'expanded'
    		}).on('error', notify.onError(function (error) {
    			return 'An error occurred while compiling sass.\nLook in the console for details.\n' + error;
    		})))
    		.pipe(autoprefixer({
    			cascade: false
    		}))
    		.pipe(sourcemaps.write('.'))
    		.pipe(gulp.dest(siteDir + 'assets/css/'))
    		.pipe(browserSync.reload({stream: true}))
    		.pipe(notify("Change css"));
    });
    
    gulp.task("watch", function () {
    	gulp.watch(siteDir + 'assets/scss/**/*.scss', gulp.series('scss'));
    });
    
    gulp.task('browser-sync', function () {
    	browserSync.init({
    		proxy: {
    			target: siteUrl,
    			ws: true
    		},
    		reloadDelay: 2000
    	});
    	gulp.watch(siteDir + "**/*.php").on('change', browserSync.reload);
    	gulp.watch(siteDir + "**/*.css").on('change', browserSync.reload);
    	gulp.watch(siteDir + "**/*.js").on('change', browserSync.reload);
    });
    
    gulp.task('default', gulp.parallel('watch', 'browser-sync'));
    Ответ написан
    Комментировать
  • Как сверстать анимацию стрелки при открытии аккордеона?

    Mecitan
    @Mecitan
    Уверенный пользователь клавиатуры
    Пишите в css свойства для анимации, её стили и через JS вешаете стили на событие.
    Ответ написан
    4 комментария
  • Как равномерно поставить палочки в меню-гамбургер?

    @alekcena
    Нелинейный наставник
    На самом деле сам бургер по факту является костылём. И самое время выучить flex-box это облегчит это в разы всю разработку.
    Если в лоб то родительский элемент flex
    свойства flex-direction, justify-content,align-items.
    3 свойства решат эту задачу
    Ответ написан
    Комментировать
  • Почему не выводится картинка превью в соц сетях?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    <meta property="og:image" content="http://site.com/example.jpg" />
    
    <meta property="og:image:secure_url" content="https://site.com/example.jpg" />
    
    <meta property="og:image:type" content="image/jpeg" />
    
    <meta property="og:image:width" content="500" />
    
    <meta property="og:image:height" content="400" />
    Ответ написан
    9 комментариев
  • Как сверстать блоки с границами?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    У всех кроме каждого 4го левую границу.
    У всех кроме первых 4х верхнюю.
    :not(:nth-child(4n))
    :not(:nth-child(-n - 4))


    p.s. И еще это не table.
    Ответ написан
    3 комментария
  • Помоготе найти пример?

    Kurokq
    @Kurokq
    Наполни смыслом каждое мгновенье
    как-то так? я правда первоначальную анимацию не видел
    Ответ написан
    5 комментариев
  • Почему не обновляются стили на сайте WP (кеш отключен)?

    @eGenius18
    со стороны WP - решается просто - при подключении стиля ставь генерацию рандом числа или просто time()

    wp_enqueue_style('my',my.css',false,time());

    а если не помогает - значит траблы не у ВП :)
    Ответ написан
    2 комментария
  • Как сверстать данный блок с помощью flex?

    @ikoit
    Web Developer
    Вот так: https://codepen.io/garisun/full/qBNNOpg
    Но вообще читайте — это полезно. Хотя бы статьи, а лучше ещё книги и твиттеры ведущих разработчиков.
    Вот Вам статья про основные раскладки блоков: https://habr.com/ru/post/522880/
    Ответ написан
    3 комментария
  • Что лучше использовать vmin или vmax?

    AngryYumy
    @AngryYumy
    Заплати фрилансеру чеканой монетой
    Лучше юзать то что, что лучше подходит данной задачи.
    Вы напоминаете мне многих новичков которые думаю, что есть какой-то ультра четкий план - тип делай так и так и будешь топ
    Ответ написан
    6 комментариев