Как уменьшить этот jQuery?

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

<script>
$( document ).ready(function() { //document ready
    $( window ).on( "load", function() { //entire page has loaded

        if ($(window).width() < 963) {
            tip = $(this).nextAll('#tail');
            tip.hide();
        }
        else {
            //Tooltips
            $("#mainbody").hover(function(){
                tip = $(this).nextAll('#tail');
                tip.show(); //Show tooltip
            }, function() {
                tip.hide(); //Hide tooltip
            }).mousemove(function(e) {
                if ($(window).width() > 962) {
                    //Change these numbers to move the tooltip offset
                    var mousex = e.pageX + 20; //Get X coodrinates
                    var mousey = e.pageY + 20; //Get Y coordinates
                    var tipWidth = tip.width(); //Find width of tooltip
                    var tipHeight = tip.height(); //Find height of tooltip
                    //Distance of element from the right edge of viewport
                    var tipVisX = $(window).width() - (mousex + tipWidth);
                    //Distance of element from the bottom of viewport
                    //var tipVisY = $(window).height() - (mousey + tipHeight);
                    var tipVisY = $("#mainbody").height() - (tipHeight);
                    if (tipVisX < 1) { //If tooltip exceeds the X coordinate of viewport
                        //mousex = e.pageX - tipWidth - 20;
                    } if (tipVisY < 1) { //If tooltip exceeds the Y coordinate of viewport
                        //mousey = e.pageY - tipHeight - 20;
                    }
                    //Absolute position the tooltip according to mouse position
                    tip.css({  top: mousey, left: mousex });
                }
            });
        }

        $( window ).resize(function() {
            if ($(window).width() < 963) {
                tip = $(this).nextAll('#tail');
                tip.hide();
            }
            else {
                //Tooltips
                $("#mainbody").hover(function(){
                    tip = $(this).nextAll('#tail');
                    tip.show(); //Show tooltip
                }, function() {
                    tip.hide(); //Hide tooltip
                }).mousemove(function(e) {
                    if ($(window).width() > 962) {
                        //Change these numbers to move the tooltip offset
                        var mousex = e.pageX + 20; //Get X coodrinates
                        var mousey = e.pageY + 20; //Get Y coordinates
                        var tipWidth = tip.width(); //Find width of tooltip
                        var tipHeight = tip.height(); //Find height of tooltip
                        //Distance of element from the right edge of viewport
                        var tipVisX = $(window).width() - (mousex + tipWidth);
                        //Distance of element from the bottom of viewport
                        //var tipVisY = $(window).height() - (mousey + tipHeight);
                        var tipVisY = $("#mainbody").height() - (tipHeight);
                        if (tipVisX < 1) { //If tooltip exceeds the X coordinate of viewport
                            //mousex = e.pageX - tipWidth - 20;
                        } if (tipVisY < 1) { //If tooltip exceeds the Y coordinate of viewport
                            //mousey = e.pageY - tipHeight - 20;
                        }
                        //Absolute position the tooltip according to mouse position
                        tip.css({  top: mousey, left: mousex });
                    }
                });
            }
        });

    });
});
</script>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете вставить код в функцию и вызывать эту функцию где хотите.

$( document ).ready(function() { //document ready
    $( window ).on( "load", function() { //entire page has loaded


        change(this)
        $( window ).resize(function() {
            change(this)
        });

    });
});

function change(_this){
    if ($(window).width() < 963) {
            tip = $(_this).nextAll('#tail');
            tip.hide();
        }
        else {
            //Tooltips
            $("#mainbody").hover(function(){
                tip = $(this).nextAll('#tail');
                tip.show(); //Show tooltip
            }, function() {
                tip.hide(); //Hide tooltip
            }).mousemove(function(e) {
                if ($(window).width() > 962) {
                    //Change these numbers to move the tooltip offset
                    var mousex = e.pageX + 20; //Get X coodrinates
                    var mousey = e.pageY + 20; //Get Y coordinates
                    var tipWidth = tip.width(); //Find width of tooltip
                    var tipHeight = tip.height(); //Find height of tooltip
                    //Distance of element from the right edge of viewport
                    var tipVisX = $(window).width() - (mousex + tipWidth);
                    //Distance of element from the bottom of viewport
                    //var tipVisY = $(window).height() - (mousey + tipHeight);
                    var tipVisY = $("#mainbody").height() - (tipHeight);
                    if (tipVisX < 1) { //If tooltip exceeds the X coordinate of viewport
                        //mousex = e.pageX - tipWidth - 20;
                    } if (tipVisY < 1) { //If tooltip exceeds the Y coordinate of viewport
                        //mousey = e.pageY - tipHeight - 20;
                    }
                    //Absolute position the tooltip according to mouse position
                    tip.css({  top: mousey, left: mousex });
                }
            });
        }
}

Спасибо. Работает как шарм.

leoarce 02.04.2018 16:23

Альтернативой является запуск обработчика событий вручную с помощью .trigger('[eventname]'):

$( window ).on( "load", function() { 
    $( window ).resize(function() {
        //do some stuff
    }).trigger('resize');
});

Этот вариант предполагает, что других обработчиков изменения размера нет, что небезопасно.

Juan Mendes 02.04.2018 16:39

Другие вопросы по теме