Как исправить код, который должен выделять выделенную область с помощью CSS

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

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

Ссылка на видео на гугл драйв

Мой код

function create_div(){
  let style = `
 background-color: rgba(130, 180, 230, 0.5);
 outline: solid 1px #0F4D9A;
 box-sizing: border-box;
 position: absolute;
 display: block;
 z-index: 999999;
`
  let e = document.createElement('DIV')
  e.setAttribute('id', 'tester')
  e.setAttribute('style', style)
  document.body.appendChild( e )
}
create_div()


$( "body" ).mousemove(function( event ) {
  $( '#tester' ).css({'display' : 'none'})
  let target = $( event.target )
  $( '#tester' ).css({'display' : 'block', "width": target.width(),
 'height': target .height(), 'top' : target .offset().top,
 'left' : target .offset().left});
})

Это мой код, написанный с помощью jQuery Он создает DIV на странице, а затем, в событии mousemove, я устанавливаю его значения (высоту, ширину и положение) быть таким же, как элемент, на котором я наведен. Но при наведении курсора я получаю несколько глючных окон.

Что мне здесь не хватает?

потому что вы зависаете над добавленным элементом ....

epascarello 03.01.2019 20:09

@epascarello Но я удаляю его с помощью `$ ('#tester') .css ({'display': 'none'})

Vlada 03.01.2019 20:18

Привет, @Vlada, вашему видео требуется доступ для просмотра. На этой ноте попробуйте добавить pointer-events: none в свои стили. Вроде убрал глючность.

Jack 03.01.2019 20:18

@Jack Привет, я изменил ссылку, теперь она должна быть доступна для просмотра

Vlada 03.01.2019 20:24

Спасибо @Vlada, видео могу посмотреть. Вы пробовали применить pointer-events: none к вашему блоку style?

Jack 03.01.2019 20:28

@Jack Да, похоже, это то, что мне нужно. Спасибо!

Vlada 03.01.2019 20:33

Привет, @AndreiGheorghiu, спасибо за понимание. Подскажите, каковы ограничения pointer-events? Почему я должен этого избегать?

Vlada 03.01.2019 20:44

Если подумать, pointer-events имеет смысл. Вы хотите, чтобы указатель естественным образом мешал работе со страницей.

tao 03.01.2019 20:58
Поведение ключевого слова "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) для оценки ваших знаний,...
0
8
68
1

Ответы 1

Вам нужно добавить pointer-events: none; в CSS #tester - это сделает DIV прозрачным для событий мыши. Это отключение от наведения мыши

Чтобы убить еще один возможный источник сбоя, давайте просто сохраним где-нибудь последнюю обработанную вами цель, чтобы не было необходимости снова изменять размер / перерисовывать #tester.

Это приведет к:

function create_div(){
    $("body").append(
        $("<div id=\"tester\"></div>").css({
            "background-color": "rgba(130, 180, 230, 0.5)",
            "outline": "solid 1px #0F4D9A",
            "box-sizing": "border-box",
            "position": "absolute",
            "display": "block",
            "z-index": "999999",
            "pointer-events": "none"
        })
     );
}

$(document).ready(create_div);

$("body").mousemove(function( event ) {
    let target = $(event.target)
    if (target.length === 0){
        $("#tester").css({
            "display" : "none"
        });
        $("#tester").data("target", null);
    }else if (
        $("#tester").data("target") === null || 
        $("#tester").data("target") !== target 
    ){
        $("#tester").data("target", target);
        $("#tester").css({
            "display" : "block", 
            "width"   : target.width(),
            "height"  : target.height(), 
            "top"     : target.offset().top,
            "left"    : target.offset().left
        });
    }
    // else {leave #tester with no changes}
});

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