Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 8782|Відповідь: 0

[JavaScript] Коли миша переходить на інший шар всередині div, це запускає вихід миші

[Копіювати посилання]
Опубліковано 17.12.2018 14:57:53 | | | |
Говорячи про DIV-елемент, всередині є елемент IMG і SPAN, не переймайся тим, як ці два внутрішнього елемента розташовані, це не те, про що я хочу говорити.

Щоб досягти спецефектів, мені потрібно використовувати події onmouseover і onmouseout у TD, і коли я їх перевірю, знайду таку ситуацію:

Коли миша рухається всередині DIV, активується подія onmouseover; Потім перемістіть мишу на елемент IMG або SPAN всередині DIV, ми точно не вважаємо, що миша перемістилася назовні DIV, але дивно, що подія onmouseout активується, і подія onmouseover також активується одразу.

Це не те, чого я хочу, тож як я можу «заблокувати» втручання подій Javascrip{filtering}t, які викликають внутрішні елементи зовнішнім?

Ось два методи:

1. встановити тайм-аут

Оскільки після того, як миша рухається над внутрішнім елементом і запускає подію onmouseout зовнішнього елемента, onmouseover зовнішнього елемента також активується одразу, тому нам потрібно лише затримати дію, яку потрібно виконати подія onmouseout зовнішнього елемента, на короткий час для виконання, а потім виконати метод clearTimeout у події onmouseover, щоб уникнути перешкод події, спричиненої внутрішнім елементом.

Будь ласка, дивіться наступну ілюстрацію для конкретного процесу виконання (вертикальна пунктирна лінія позначає час):


Це розумний підхід, бо коли активується onmouseout, основний метод не виконується одразу, а чекає короткий час. Якщо подія onmouseover активується одразу в цей час, то фактично гарантовано, що подія onmouseout спрацьовує через втручання внутрішніх елементів, тому використовуйте clearTimeout у події onmouseover, щоб запобігти виконанню затриманого методу.

2. містить

Зробіть наступне рішення при націленні на мишку, а потім виконуйте тіло методу, коли результат істинний:


Зробіть наступне рішення при виході миші, а потім виконайте тіло методу, коли результат істинний:

Ось пояснення значення цих двох рядків коду:

У IE всі HTML-елементи мають метод contain, який визначає, чи містить поточний елемент заданий елемент. Ми використовуємо цей метод для визначення, чи запускається подія зовнішнього елемента внутрішньою подією, і якщо всередині елемент викликає небажану подію, то цю подію ігноруємо.

event.fromElement вказує на елемент, з якого миша залишає події, коли активуються події onmouseover і onmouseout; event.toElement вказує на елемент, у який миша входить під час активації подій onmouseover і onmouseout.

Отже, значення двох наведених вище рядків коду таке:


  • Коли активується подія onmouseover, вона визначає, чи є елемент, залишений мишею, внутрішнім елементом поточного елемента, і якщо так, ігнорує цю подію;
  • Коли активується подія onmouseout, оцінюйте, чи є елемент, введений мишею, внутрішнім елементом поточного елемента, і якщо так, ігноруйте цю подію;



Таким чином, внутрішній елемент не заважає подіям onmouseover і onmouseout зовнішнього елемента.

Але проблема знову в тому, що браузери, які не підтримують IE, не підтримують функцію contain, але тепер, коли ми знаємо функцію contain, можемо додати наступний код, щоб додати підтримку contain, не IE-браузерів:


Вищезазначені методи не сумісні з Firefox:

Суть у тому, що jQuery:

jЗапитВикористовуйте mouseleave замість mouseout, щоб те, що сказано вище, не сталося.

Також перемикання миші буде активуватися неодноразово, просто використовуйте MouseEnter.

Ідеальне рішення~





Попередній:Список jQuery дозволяє лише одну активну перевірку
Наступний:Фреймворк веб-додатків Tapestry
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com