Задать вопрос
Ответы пользователя по тегу JavaScript
  • Почему после присваивания значения переменной другой переменной, меняется массив первой переменной?

    @daniil14056
    Все что не является числом, символом или строкой, является лишь указателем на область памяти, от куда начинается этот Обьект,
    Массив же как обьект у тебя это указатель к примеру он равен
    let aaa = [1,2,3] //  aaa на самом деле на низком уровне равно
     //к примеру 0x8e118e8e - это адрес в памяти где будет хранится 
    1(первый элемент массива), это указатель на первый элемент. 
    Тогда 2 будет(тип Int = 4 байта) =0x8e118e8e+4 = 0x8e118e91.

    А массивы в js еще и динамические как и типы данных!
    Если нужно скопировать, то нужно скопировать все его значения, которые не являются объектами.
    Использую [].slise(); можешь создать пустой массив, и через for( ... ) заполнить его пройдясь по элементам.
    Ответ написан
    Комментировать
  • Можно ли сохранить все объекты canvas в текстовый файл?

    @daniil14056
    Элементы canvas более абстрактные.В отличии от декоративного svg, они не элементы, а программный код.
    Но можно сохранить в формате json(к примеру), при загрузки canvas, посылать json запрос на это файл, парсить его в обьект, и из него уже брать координаты.
    Ответ написан
    1 комментарий
  • Как получить порядковый номер месяца из строки в JS?

    @daniil14056
    Вот вроде так будет, хотя лучше будет сразу определиться с месяцами, на "ь" или "я" они оканчиваться будут.
    /// Быстро и сразу изменить строку на лету
    var str="1 января1844";
    var newStr= str.replace (/\d+\s+([^ ]+)\s+\d+/, function(str,s1,s2){
         var sN="";
         if(s1[s1.length-1]==='я') 
                  sN=s1.substring(0,s1.length-1)+"ь";
         else sN=s1;
        if(sN && m[sN]!="undefined")    return str.replace(s1,m[sN]); 
         else return str;
    });
    //  Получить номер месяца
    var number;
    var mouth="1 января 1844" .match(/\d+\s+([^ ]+)\s+\d+/)[1]; 
    number=m[mouth];
     if(number==undefined) 
               number=m[mouth.substring(0,mouth.length-1)+"ь"];
    Ответ написан
    Комментировать
  • Как получить содержимое тега script?

    @daniil14056
    Добавь id r скрипту или найди его селектор
    var script=document.getElementById("id-script");
    var scriptTarget=document.getElementById("id-script-target");
    scriptTaget.innerText=script.innerTarget; // скрипт не будет исполнен, так как этот элемент уже был загружен.
    // более правильно будет создать элемент скрипта и добавить его на страницу
    var s=document.createElement("script");
    s.innerText=script.innerText;
    document.body.appendChild(s);
    Ответ написан
    Комментировать
  • Как полностью отключить звук на сайте?

    @daniil14056
    Google Chrome на вкладку правой мышкой, отключить звук на вкладке, и Азино 3 Топора бесить не будут
    Ответ написан
    Комментировать
  • Как улучшить код javaScript и подход в целом?

    @daniil14056
    Уделил час времени, вот основные недочеты, будет приятно если ознакомитесь.
    1.!!!!!! Много обработчиков. Можно одним все решить. Почитайте про делегирование событий.
    ///
    var interface=document.getElementById("interface");
    interface..addEventListener('input', function (e) {
            var target= e.target || e.srcElement // получаем элемент где произошло событие
            switch(target.id){    
                  case "hatHarmon" : // для каждого input
                          aVolume = e.target.value;
                           break;
                   case  //.....
        });
    // И проще и быстрее и нагляднее. Вместо мусора ...Button-ов то же самое одним все накрыть.


    2.Слишком много document.querySelector ты каждый раз во всем document, то есть во всем dom дереве ищешь то что находиться рядом! Намного быстрее будет
    var interface=document.getElementById("interface"); 
    var hatValume=interface.querySelector("#hatVolume")
    tomValue=hatValume.parentElement.nextElementSibling.querySelector("#tomVolume");

    3. getDocumentId быстрее чем querySelector(#id) в разы, сам проверял.

    4. Область видимости ;(function(){ ю..весь код...})();

    5. У тебя ++i в конце в цикле script.js не обрабатывает первый элемент.. Замени на i++;
    Т.е. ты находишь элемент и уже в нем ищешь.

    6.
    if (dCh.checked) {
            dVel = 1;
        };
        
        if (!dCh.checked) { // зачем, лишние операции, потеря скорости,  замени на else
            dVel = 0.5;
        };
    
        if (cCh.checked) {
            cVel = 1;
        };
        // не красиво долго, плохие имена, я путаю, "dCh cCh - 10 сек уходит на нахождение различия". Код не поддерживается, долго искать что такое cCh, вся область засорена мусорными глобальными переменными. 
    // Решение, разбить все на блоки или функции, или Паттерн реализовать, к примеру фабрику для звуков и акцентов
    // Массивы у вас не массивы а куча переменных, можно автоматизировать циклом, создать массив из этих элементов, и перебирая его уже составить 2 массива из звуков и акцентов, и уже работать с ними.

    7. Не правильно именуете переменные, переменные с маленькой буквы именуют, а классы большими.

    8style.css очень плохо, вы снова каждый раз ищите во всем документе. Составляйте более конкретные селекторы
    #start:hover,  
    #stop:hover,
    #clear:hover {
        background-color: #2C7769;
    }
    /* медленно, xQuery долго(для больших проектов конечно) их ищет этот селектор. Нужно расписать до него путь поконкретнее*/
    #playStop div{
           background-color: #2C7769;
    }


    9 Вы много раз в подряд объявляете i, let i не спасает в циклах, у вас есть let i=0; глобальной области в начале где-то. Потом можно уже просто for(i=0;i<....
    Вроде все. Но код рабочий конечно, но почти не живучий.
    Ответ написан
    1 комментарий
  • Почему не работает&& в скрипте?

    @daniil14056
    В скобки возьми все до && у тебя проверяется не со всем выражением а с предпоследним a == 'pavel durov' && count == 3
    Ответ написан
  • Как заменить текст с помощью регулярных выражений в jQuery?

    @daniil14056
    Регулярные выражения нужны при парсинге страницы, и извлечении информации, а jQuery это уже работа с dom этой страницы
    Вот ууделил времени, без JQuery изменяем текст, к примеру шаблон какой-то, пришедший с сервера и добавляем в документ.
    /**
     * Изменяет по шаблону все найденные совпадения
     * @param htmlcode    страница которую нужно изменить
     * @param listReplace  список значений для изменения найденных
     * @param pattern      паттерн регулярное выражения поиска
     * @param globalFind   нужно ли изменять все значения или только одно
     * @returns {*|string|void}  возращаяет изменненный текст html документа
     */
    function  replaceToken(htmlcode, listReplace,pattern, globalFind = true) {
        /**
         * Получает список токенов, которыми нужно заменить
         * Возращает заряженный генератор с списком по порядку выражений замены,
         * каждый раз будет возращать новое значение замены, список может быть прислан с сервера,
         * в случаее если найденных значений будет больше, то он не чего не измениn. Выражение "$&"
         * не изменяет найденое вхождение
         * @param list_tokens - массив- список значений которыми нужно заменить всякие 0x23423j343/
         * @returns {{generator: generaterSReplace}} возвращает генератор, который каждый раз будет возвращать следующие значения для замены 
         */
        function  loadGenerator(list_tokens) {
            return {
                generator: function* generaterSReplace() {
                    for(let i=0; i<list_tokens.length;i++)
                        yield list_tokens[i];
                    return "$&";
                }
            }
        }
    
        let generator=loadGenerator(list_tokens).generator();
        let reg;
        if(globalFind || listReplace instanceof Array)
            reg =new RegExp(pattern,["mg"]);
        else
             reg=new RegExp(pattern,["m"]);
    
        return res =htmlcode.replace(reg,function(str1,str2){
            return str1.replace(str2,generator.next().value);
        });
    
    }/****************TEST-------------------------TEST***********************************/
    var list_tokens=["1234567890","0987654321"];  // значения для замены, то есть html документ к примеру шаблон присланный с сервера или исходный текст самой страницы к примеру  
    //                  var htmlCode; 
    //                  $.get(document.location.href, function(data){htmlCode=data.data});
    let html='разные там <b>html</b>елементы. А вот и трока поиска: </b><b id="finish_kar_cri">0x61496a395F549XzxzxZ</b>....' +
        'a вот  еще один такой же элемент(предположим что там class а не id для массового поиска)'
        +'<b id="finish_kar_cri">0x323232323</b>...';
    
    let pattern='<b id="finish_kar_cri">(\\w+)</b>'; // ваша строка поиска в скобках значениыя ддля замены
    var res=replaceToken(html,list_tokens,pattern);   // возвращаем имененную строку
             $(document).append(res);        // console.log(res)// результат, измененная   текст с вашим токеном


    А это просто работа с самим текущим документов jquery
    // token[1] - и будет найденным текстом
    var ell=$("#finish_kar_cri");
    var lastVal=ell.text(); // запомнили старое значение
    ell.text("8496444");
    Ответ написан
    Комментировать
  • Как на html+css сделать окружность, которую в зависимости от времени можно закрашивать используя js?

    @daniil14056
    Не понял вопрос, но можно
    А уже интервалы и способ описания изменения цветов, нужно самому описать
    <div id="circle" style="width:100px; height:100px; border-radius:50px; background-color:RGB(255,0,0)"></div>
    <script>
    (function(){
           var div=document.getElementById("circle");
           var lastR=255;
            var lastG=0;
           var lastB =0;
           setInterval(()=>{
                   div.style.backgroundColor="RGB("+lastR+","+lastG+","+lastB+")";
                   if(lastG<255)
                   	lastG++;
                   else
                   	lastG=0;
                   if(lastG<255){
                   	lastB++;
                   }
                   else 
                   	lastB=0; 
               },100);
       })();
    </script>
    Ответ написан
    Комментировать
  • Что это за в ошибка jquery?

    @daniil14056
    Как я помню, в Query нету метода slick(), она из плагина какого-то для query, так что ты его просто не подключил просто. Первая строчка указывает, что файл не загружен. Скорее ты не подключил плагин.
    Ответ написан
    Комментировать