Задать вопрос
  • Добавляют ли файлы сайта на CMS в git?

    @ksnk
    Для joomla - нет. Получившийся репозиторий будет сложно (невозможно) использовать просто из за его гигантского размера. Единственный вариант - это какая-то застарелая, многолетне исправляемая в исходниках версия системы, которую просто страшно потерять. Надеюсь, это не такой случай :)
    Вообще - помещать в СВОЙ репозиторий нужно только СВОИ файлы - те, которые не идут с инсталляции системы и плагинов, а добавлены вручную.
    Нужно обязательно проверить, что репозиторий можно раскрутить в работоспособный проект с нуля, для этого служит композер или еще какие пакеты установки.
    Ответ написан
    Комментировать
  • Как скрыть конец ссылки в адресной строке?

    @ksnk
    Тебе , вероятно, нужно не скрыть конец адресной строки, а выкинуть уже ненужный параметр select ?
    Что нибудь этакое, если в query_string действительно query_string, а не что-то еще
    $query=[];
    parse_str(parse_url($query_string, PHP_URL_QUERY),$query_array);
    unset($query_array['select']);
    echo (!empty($query_array)?'?':'').http_build_query($query_array);
    Ответ написан
    Комментировать
  • Как сделать хаотичное расположение слов с помощью CSS или JS?

    @ksnk
    Зависит от смысла задачи. Если поместить что-то такое на сайт, то гуглить по слову `wordart wordcloud`. Если понять, как делать самому или даже попытаться сделать - гуглить по словам "Облако тегов" или вот ссылка на доку от автора Wordle

    На js - Пример, и гитхаб
    Ответ написан
    Комментировать
  • Canvas convertion .SWF реально?

    @ksnk
    Ищи в гугле по словам `3d max javascript`.
    Это моделька из 3dmax, которую можно рендерить прямо в броузере. Обычно (и здесь тоже), это делают через TreeJs
    Ответ написан
    Комментировать
  • Как ограничить выполнение функции mousemove 1 раз в секунду?

    @ksnk
    Довольно накладно менять стиль в списке стилей, чтобы они поменяли бякграунд у единственного элемента. Не проще ли явно менять стиль у этого самого элемента? Явно будет эффективнее.

    Ну а по сути вопроса - вот так можно без дополнительных сущьностей. 10 строк и никакого мошенничества с npm ...

    function moveBg(evt){
        if(!!moveBg.timeout){ // функция недавно вызывалась  - запоминаем параметр и ждем;
            moveBg.evt=evt;
            return ;
        }
        // начинаем засечку времени 1 сек. По окончании таймаута вызываем функцию с  последним актуальным параметром, если надо
        moveBg.timeout=setTimeout(function(){moveBg.timeout=null; if(!!moveBg.evt){moveBg(moveBg.evt); moveBg.evt=null}},1000 );
        // дальше без изменений и коррекций
        var totalWidth = $('.home-shadow').width()
        var rect = evt.target.getBoundingClientRect()
        var x = evt.clientX - rect.left;
        var percent = x*100 / totalWidth
        console.log(percent)
    
        var styleElem = document.head.appendChild(document.createElement("style"));
    
        styleElem.innerHTML = `#home-shadow:before {background-position: ${percent}% 50%`;
    }
    
    $('body').mousemove(function(evt){
        if(evt.target.classList[0] == 'home-shadow'){
            moveBg(evt);
        }
    });
    Ответ написан
    Комментировать
  • Как сделать, чтобы при смене радиокнопки удалялось прибавленное значение и прибавлялось новое?

    @ksnk
    https://jsfiddle.net/7ekjafbq/1/
    А почему бы не пользоваться тем, что это почти форма ? Добавить в контролы имена, значения и пользоваться почти штатной сериализацией.
    Ответ написан
    1 комментарий
  • Как удалить строку по символам (эффект печатающей машины)?

    @ksnk
    let control = document.querySelector('.text'), 
            txt= control.textContent, 
            track=[];
        function runit(){
            let c= track.shift();
            if(!c) return ;
            if(c[0]==='pause'){
                setTimeout(runit,c[1]);
            } else if(c[0]==='substr') {
                control.textContent = txt.substr(c[1], c[2]);
                setTimeout(runit, 300);
            }
        }
        // программируем поведение
        for( let i=1;i<=txt.length;i++){
            track.push(['substr',0,i]);
        }
        track.push(['pause',3000]);
        for( let i=txt.length;i>=0;i--){
            track.push(['substr',0,i]);
        }
        runit();


    Не оно ?
    Ответ написан
    Комментировать
  • Как разместить два попапа на одной странице?

    @ksnk
    Ответ написан
    Комментировать
  • Не работает анимация jquery. В чем проблема?

    @ksnk
    Можно вместо $ везде писать jQuery. Или разобраться, почему эту переменную переопределяют все кому не лень
    Ответ написан
  • Как удалить из массива стринги в которых НЕ числа?

    @ksnk
    ["5", "0", "1jj1","1.1111111111111111" ].filter(v => v==(1*v))
    Ответ написан
    Комментировать
  • Как узнать, пересекаются ли блок с каким-либо другим с position absolute?

    @ksnk
    Для каждого элемента берем getBoundingClientRect и проверяем, что пересечение существует.
    Извиняюсь, что на jQuery, но смысл, вроде и так понятен.
    $(function(){
      var elements=$('.red,.yellow');
      for(let i=0;i<elements.length;i++){
        let ri=elements.eq(i)[0].getBoundingClientRect();
        for(let j=i+1;j<elements.length;j++){
          let rj=elements.eq(j)[0].getBoundingClientRect();
          console.log(//ri,rj, 
                      Math.max(ri.x,rj.x)<=Math.min(ri.x+ri.width,rj.x+rj.width)
                     &&
                      Math.max(ri.y,rj.y)<=Math.min(ri.y+ri.height,rj.y+rj.height)
                     )
        }
      }
    })
    Ответ написан
    Комментировать
  • Как сделать так, чтобы после открытия новой вкладки в браузере Хром старая вкладка автоматически закрывалась?

    @ksnk
    <a href="#" onclick="setTimeout(function(){window.close()},3000)" target="_blank">xxx1</a>

    Не так ?
    Ответ написан
    Комментировать
  • Как сделать алгоритм победы в больших крестиках-ноликах?

    @ksnk
    Берем 4 направления - [0,-1],[1,-1],[1,0],[1,1], к примеру - [0,-1] - это вверх. Инвертируем все цифры - получаем противоположное [0,1] - вниз.
    Поставили, к примеру крестик.
    Изменяем стартовые координаты на "направление". если там тоже крестик - идем дальше. Если нет - прекращаем.
    Переключаемся на противоположное направление, считаем крестики. Если досчитали до 4-х - победа крестиков.
    Если прошли все направления - отдаем ход. Ну и координатную сетку как-то надо вбить в разметку, например как-то так
    // Создаю клетки 49 клеток с классом "cell"
        for(let i = 1; i <= 49; i++) {
            var x=Math.floor((i-1)/7)+1,y=((i-1)%7)+1;
            area.innerHTML += `<div class='cell' id='id-`+x+`-`+y+`'></div>`
        }
    
        // Отслеживаю клик по клетке и выполняю функцию cellClick()
        const cells = document.querySelectorAll('.cell')
    
        cells.forEach(cell => {
            cell.addEventListener('click', cellClick, false)
        })
    
        // Первый игрок - X
        let player = 'x'
    
        // В функции cellClick() я проверяю занята ли клетка, и если нет, то
        // вставляю в неё текущего игрока.
        function cellClick() {
    
            /**
             * проверяем, что по координатам x,y стоит нужный знак
             *
             * @param x
             * @param y - координаты
             * @param player - крестик
             * @returns {boolean} true - стоит
             */
            function check(x,y,player){
                return document.getElementById('id-'+x+'-'+y).innerHTML==player;
            }
    
            /**
             * считаем количество крестиков(player) от координаты x,y в "направлении" dx,dy
             * @param dx
             * @param dy
             * @param x
             * @param y
             * @param player
             * @returns {number}
             */
            function countit(dx,dy,x,y, player){
                var total=0;
                x+=dx; y+=dy;
                while (x>0 && x<=7 && y>0 && y<=7 ){
                    if(check(x,y,player))
                        total++;
                    else
                        break;
                    x+=dx; y+=dy;
                }
                return total;
            }
    
            if (!this.innerHTML) {
                this.innerHTML = player;
                // so checkit
                var dirs=[[0,1],[-1,1],[-1,0],[-1,-1]],
                    // вычисляем текущие координаты клика
                    m=this.getAttribute('id').match(/id-(\d+)-(\d+)/),
                    // вот они - координаты. Умножение для преобразования строк в числа
                    x=1*m[1], y=1*m[2];
                for(var d=0;d<dirs.length;d++){
                    if(5>1+ // 1 - мы поставили крестик
                        // число крестиков в направлении
                        countit(dirs[d][0],dirs[d][1], x, y, player) +
                        // и инвертированном направлении
                        countit([-dirs[d][0],-dirs[d][1]],x ,y , player)
                    ){
                        // если меньше чем надо для победы - считаем дальше
                        continue;
                    }
                    // если нашли больше 5 крестиков в ряд - победа.
                    alert('Победа '+player);
                    break;
                }
            }
    
            // Меняю игрока, если текущий игрок сходил.
            player = player == "x" ? "o" : "x"
        }
    Ответ написан
    5 комментариев
  • Как в slick-slider реализовать длинный слайд?

    @ksnk
    Наилучшее решение - дать дизайнеру по наглой рыжей морде и объяснить, что слайдер со скроллером - это то еще гуано. Слайдер обязан демонстрироваться сам, без участия пользователя.
    Решение раз - порезать картинку на несколько, разумной длины
    Решение два, если дизайнер оказался сильнее, автоматически, анимацией, скроллировать длинный слайд от начала кадра до конца, за время демонстрации самого слайда. Ставится в метод afterChange слик слайдера. Посчитать размер картинки, размер окна слайда, время демонстрации и анимировать разницу.
    как - то так https://jsfiddle.net/jcoa5L6x/2/
    Ответ написан
    1 комментарий
  • Почему угасает энергия в моделировании "гравитации" в JS?

    @ksnk
    В момент удара по горизонтальной поверхности - sy - максимальна, после чего она инвертируется. И в этот же момент уменьшается. Тоесть каждый удар по плоскости, максимальная скорость убегания становится меньше на G. Просто выведи скорость сразу после инвертирования sy и все сам увидишь
    Ответ написан
    5 комментариев
  • Как получить значение полей формы в Ангуларе из автозаполненой формы?

    @ksnk
    Собирай значения полей не сразу в onload а через таймаут. Автозаполнение - это тоже скрипт, который выполняется после загрузки страницы и ему нужно время.
    Ответ написан
    Комментировать
  • Как составить регулярное выражение?

    @ksnk
    Если нужно регулярки - вот так можно
    let m= document.body.innerHTML.match(/(?=[^>]*name="email")<input[^>]+value="([^"]+)"/is);
    console.log(m[1]);

    Регулярка из 2-х половин. Вторая определяет элемент и выковыривает его value, первая проверяет, что name у этого элемента правильный. Расчет на то, что кавычки всегда будут двойными.
    Через Дом, конечно, лучше. На кавычки закладываться не придется.
    Ответ написан
    Комментировать
  • Как указать московское или серверное время в автоотправке запроса с помощью JS?

    @ksnk
    Что такое - сверхвысокая точность ? С точностью до секунды?
    Как узнать оставшееся время в setTimeout?
    Устанавливает таймер на "точный" интервал. Точность достигается тем, что функция вызывается раз в секунду (интервал настраивается) и корректирует оставшееся до событие время. Реальная точность зависит от нагрузки на компьютер в момент срабатывания таймера.
    Для срабатывания в нужное время нужно указать это время в формате с таймзоной.
    function setMyTimer(_t, interval){
            if(typeof(_t)=='function'){
                _t={main:_t}
            }
            _t.start=Date.now();
            _t.interval=_t.interval||interval;
            _t.log_interval=_t.log_interval || 1000;
    
            function log(){
                const diff=_t.interval - (Date.now() - _t.start);
                if(_t.log)_t.log(diff);
                if(diff>_t.log_interval)
                    setTimeout(log,_t.log_interval);
                else {
                    setTimeout(_t.main,diff<0?1:diff);
                }
            }
    
            setTimeout(log,_t.log_interval);
        }
    
        let AlertTime=new Date('2020-11-18T10:39:00+03:00') ;
    
        setMyTimer(()=>alert('Доставка!'), AlertTime.valueOf()-Date.now());
    Ответ написан
    3 комментария
  • Как написать такой regexp для js?

    @ksnk
    Регулярки по таким идиотским условиям пишутся тупо. Используются маски предварительного просмотра look ahead - (= и (!

    - минимум 7 символов (?=.{7})
    - максимум 64 символа (?!.{65})
    - допускается только латиница - самое идиотское. Требуется уточнение, по немецки, там или иероглифами, значит, можно ? Будем считать, что русские буквы нельзя - (?!.*[ёЁа-я])
    - не должен содержать... - (?!.*[!@#$%^&*? ])
    - нельзя ввести 4 одинаковых символа. Тоже то еще условие... 4 запятые подряд, значит, можно ? Будем считать, что любые 4 подряд нельзя - (?!.*(.)\1\1\1)
    - комбинации qwerty - (?!.*qwert)
    - комбинации 1234 - (?!.*1234)
    - не совпадает со словом password - (?!password$)
    - не должен содержать пробелы (?!.*\s)
    Итого - объединяем и тадамс!
    let reg=/^(?=.{7})(?!.{65})(?!.*[ёЁа-я])(?!.*[!@#$%^&\*\?])(?!.*(.)\1\1\1)(?!.*qwert)(?!.*1234)(?!password$)(?!.*\s).*/i

    Можно обойтись меньшим количеством букв, но стоит ли. Читабельность в этом деле ариважна.

    Второй пример сам сделаешь ?
    Ответ написан
    Комментировать
  • Как отобразить на картах путь (пешком) с одной центральной точки к нескольким другим (в разных) местах одновременно?

    @ksnk
    https://habr.com/ru/post/197448/
    не оно ? Можно несколько раз заставить googlemap нарисовать маршрут движения.
    Если не получится/не понравится - нарисовать все маршруты вручную (google.maps.Polyline), используя координаты из инструментов внизу статьи.
    https://jsfiddle.net/rkme98af/
    Ответ написан
    Комментировать