Ответы пользователя по тегу JavaScript
  • Как дописать скрипт на скрытие элементов?

    @Sozdavan
    Один из способов добиться такого поведения — добавить проверку количества видимых элементов перед вызовом функции slideToggle. Если количество видимых элементов равно общему количеству элементов, вы можете использовать функцию slideToggle с другим аргументом, чтобы скрыть элементы вместо их отображения. Вот пример того, как вы можете это сделать:

    $('.more-functions').click(function(){
      var hiddenItems = $('.functions__item:hidden');
      if(hiddenItems.length > 0) {
        hiddenItems.slice(0,5).slideToggle('slow');
      } else {
        $('.functions__item:visible').slice(-5).slideToggle('slow');
      }
      //... rest of the code
    });


    Это проверит, есть ли какие-либо скрытые элементы, и если да, то отобразятся следующие 5, в противном случае будут скрыты последние 5 видимых элементов
    Ответ написан
    Комментировать
  • Как вызвать функцию которые находится внутри функции замыкания на js?

    @Sozdavan
    В JavaScript функция замыкания — это функция, которая имеет доступ к переменным в своей родительской области видимости даже после возврата родительской функции. Чтобы вызвать функцию внутри функции замыкания, вам нужно сначала вернуть внутреннюю функцию из внешней функции замыкания, а затем вызвать ее, вызвав возвращенную функцию. Вот пример:

    function outerFunction() {
      let x = "Hello";
    
      return function innerFunction() {
        console.log(x);
      }
    }
    
    let myFunction = outerFunction();
    myFunction(); // Output: "Hello"


    В этом примере outerFunction это функция закрытия, которая возвращает innerFunction. Переменная x доступна innerFunction даже после outerFunction возврата. Чтобы вызвать innerFunction, мы сначала присваиваем его переменной myFunction, вызывая outerFunction(), а затем вызываем myFunction(), что выводит «Hello» на консоль.
    Ответ написан
    3 комментария
  • Почему после закрытия окна magnificPopup блокируется весь js на странице?

    @Sozdavan
    Эта проблема может быть вызвана тем, как плагин Magnific Popup обрабатывает удаление модального окна со страницы. Плагин может удалять элементы или прослушиватели событий, которые необходимы для правильной работы другого кода JavaScript на странице. Одним из возможных решений может быть использование функции обратного вызова afterClose, предоставляемой плагином, для повторной инициализации любого необходимого кода JavaScript после закрытия модального окна. Эта функция обратного вызова вызывается после закрытия модального окна, позволяя вам запустить любой необходимый код JavaScript для восстановления функциональности вашей страницы. Другим решением может быть использование опции обратных вызовов для повторной инициализации прослушивателей событий после закрытия модального окна

    $(document).ready(function() {
        $('a.freply').magnificPopup({
            type: 'ajax',
            showCloseBtn: true,
            removalDelay: 300,
            closeBtnInside:true,
            callbacks: {
                close: function() {
                    //повторно инициализируйте свой код javascript здесь
                }
            }
        });
    });


    Также возможно, что проблема заключается в других частях вашего кода, которые вы здесь не указали, и потребуется отладить всю кодовую базу
    Ответ написан
    Комментировать
  • Как задать размер листа при отправке на печать с помошью PHP или JS?

    @Sozdavan
    В PHP вы можете использовать библиотеку TCPDF, чтобы установить размер страницы и создать файл PDF с нужными размерами. Вот пример того, как установить размер страницы 6x4 см:
    require_once('tcpdf.php');
    
    $pdf = new TCPDF('P', 'cm', array(6, 4), true, 'UTF-8', false);
    
    // ... your code to add content to the PDF ...
    
    $pdf->Output('example.pdf', 'I');


    В JavaScript вы можете использовать библиотеку jsPDF для создания и сохранения файла PDF с нужными размерами. Вот пример того, как установить размер страницы 6x4 см:

    var doc = new jsPDF('p', 'cm', [6, 4]);
    
    // ... your code to add content to the PDF ...
    
    doc.save('example.pdf');


    Обе эти библиотеки также поддерживают другие функции для добавления текста, изображений и другого содержимого в документ PDF
    Ответ написан
    6 комментариев
  • Можно ли написать JS-регулярку, которая матчит строку только если в строке четное количество вхождений какого-либо символа?

    @Sozdavan
    Невозможно написать регулярное выражение, которое будет возвращать истину только в том случае, если в строке есть четное количество любых символов, используя только регулярные выражения, потому что регулярные выражения не имеют возможности «запоминать» количество совпадающих вхождений. Одним из возможных подходов к решению этой проблемы было бы использование комбинации регулярных выражений и языка программирования. Вы можете использовать регулярное выражение для сопоставления интересующих вас символов, а затем использовать язык программирования для подсчета количества вхождений этих символов и проверки их четности. Другим возможным подходом может быть использование другого алгоритма, такого как подсчет количества вхождений каждого символа в строку, а затем проверка четности числа для каждого символа. Этот подход может быть реализован с использованием цикла и структуры данных словаря на большинстве языков программирования. Наконец, вы можете использовать другой язык со встроенной функцией для этой проблемы, например, python с его функцией Counter(), он даст вам диктовку с количеством каждого символа в строке.
    Ответ написан
    1 комментарий
  • Почему display: flex ломает textbox?

    @Sozdavan
    Проблема, с которой вы сталкиваетесь, вероятно, вызвана тем, что контейнер .write-note-field имеет отступы, из-за чего элемент .input-form внутри него занимает больше места, чем кажется визуально. Когда вы устанавливаете для свойства display элемента .input-form значение flex, он занимает всю ширину и высоту родительского контейнера с отступом, поэтому вы можете щелкнуть за пределами текстового поля и активировать его. Одним из решений этой проблемы может быть удаление заполнения из контейнера .write-note-field. Как вы заметили, это решит проблему, но может не дать желаемого визуального результата. Другим решением было бы добавить указатель-events: none; в контейнер .write-note-field. Это предотвратит регистрацию кликов на контейнере и, таким образом, предотвратит активацию ввода. Другим решением было бы добавить div-обёртку вокруг формы и присвоить ей класс, например:
    <div class="form-wrapper">
        <form id="note-editor-wrapper" className="input-form" >
                <div contentEditable="true" id="note-editor" role="textbox" tabIndex={0}></div>
        </form>
    </div>

    Затем вы можете указать div-обёртке position: relative и элемент формы position: absolute, с шириной и высотой 100%. Это приведет к тому, что элемент формы полностью заполнит div-обёртку и, таким образом, сделает невозможным активацию ввода, нажав на обёртку:
    .form-wrapper {
        position: relative;
    }
    .input-form {
        position: absolute;
        width: 100%;
        height: 100%;
    }


    Вы также можете попытаться указать максимальную ширину и максимальную высоту для элемента формы, чтобы он не смог заполнить всю div-обёртку:
    .input-form {
        max-width: 100%;
        max-height: 100%;
    }


    Вы также можете попытаться указать минимальную ширину и минимальную высоту для элемента формы, чтобы он не смог заполнить весь div-обёртку

    .input-form {
        min-width: 100%;
        min-height: 100%;
    }


    Вы также можете попытаться указать ширину и высоту элемента формы, чтобы он не смог заполнить весь div-обёртку

    .input-form {
        width: 100%;
        height: 100%;
    }


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

    @Sozdavan
    Да, можно изменить скрипт, чтобы он работал на конкретном классе из HTML. В коде JavaScript вы можете использовать метод querySelector или querySelectorAll, чтобы выбрать элемент (элементы) с определенным классом, а затем манипулировать этими элементами или применять к ним желаемую функциональность. Вот пример того, как вы можете использовать метод querySelector для выбора изображения с классом «glitch_effect» и применить к нему эффект сбоя с помощью библиотеки p5.js:

    // Select the image element with the class "glitch_effect"
    const img = document.querySelector('.glitch_effect');
    
    function setup() {
        // Create a canvas and set its size
        createCanvas(img.width, img.height);
        // Draw the image on the canvas
        image(img, 0, 0);
    }
    
    function draw() {
        // Apply the glitch effect to the image
        // (This would typically involve manipulating the pixels of the image)
        // ...
    }


    Точно так же, если вы хотите выбрать несколько элементов с одним и тем же классом, вы можете вместо этого использовать метод querySelectorAll, который возвращает NodeList элементов, соответствующих переданному ему селектору.

    const images = document.querySelectorAll('.glitch_effect');
    images.forEach(image =>{
        // apply effect to each image
    })

    Также важно отметить, что ваш сценарий должен располагаться после элементов, которые вы хотите выбрать. в приведенном выше примере у вас есть тег
    Ответ написан