2016-10-13 4 views
5

Используя библиотеку материалов Lite для создания dialogs, в которой по существу используется базовый элемент <dialog>, есть ли способ отклонить диалог, щелкнув по его фону? (При щелчке по самому диалоговому окну должно быть отклонено не).Элемент диалога Dismiss html, щелкнув по фону

<dialog>Hi</dialog>  
<button>show</button> 

document.querySelector("button").addEventListener("click", 
() => document.querySelector("dialog").showModal()); 

https://jsfiddle.net/fyjbvbqq/

Щелчок в любом месте на экране, когда отображается диалоговое окно соответствует щелчку dialog элемент так, что кажется, что не существует простой способ определить, если фон нажал ... есть способ сделать это?

ответ

2

Вы можете использовать Element.getBoundingClientRect, чтобы получить размер и положение диалога и испытания, если текущие координаты клиента находятся внутри этой области:

document.querySelector("button").addEventListener("click",() => document.querySelector("dialog").showModal()); 
 
document.querySelector("dialog").addEventListener("click", (e) => { 
 
    var rect = e.target.getBoundingClientRect(); 
 
    var minX = rect.left + e.target.clientLeft; 
 
    var minY = rect.top + e.target.clientTop; 
 
    if ((e.clientX < minX || e.clientX >= minX + e.target.clientWidth) || 
 
     (e.clientY < minY || e.clientY >= minY + e.target.clientHeight)) { 
 
    e.target.close(); 
 
    } 
 
});
<dialog>Hi</dialog> 
 

 
<button> 
 
    show 
 
</button>

+0

Это довольно близко, но я думаю, хотите, чтобы противоположность этой логики (щелчок по фону увольняется, когда я запускаю свой фрагмент, я должен щелкнуть по самому диалогу, чтобы его отклонить) –

+0

@ExplosionPills Исправлено. Извините за мой английский, я понял точно противоположное. Теперь, только щелкнув снаружи, диалог будет рассеян. – gaetanoM

+0

Спасибо! единственная проблема, которую я вижу, заключается в том, что рамку границы рамки можно также щелкнуть, чтобы отклонить модальную, но это не имеет большого значения. Просто интересно, есть ли простой способ справиться с этим –

Смежные вопросы