소스 검색

fix menu out of bounds

DIYgod 8 년 전
부모
커밋
2931d139d2
3개의 변경된 파일21개의 추가작업 그리고 2개의 파일을 삭제
  1. 0 0
      dist/DPlayer.min.js
  2. 0 0
      dist/DPlayer.min.js.map
  3. 21 2
      src/DPlayer.js

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/DPlayer.min.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/DPlayer.min.js.map


+ 21 - 2
src/DPlayer.js

@@ -1163,10 +1163,29 @@ class DPlayer {
         this.element.addEventListener('contextmenu', (e) => {
             const event = e || window.event;
             event.preventDefault();
-            menu.style.left = event.clientX - this.element.getBoundingClientRect().left + 'px';
-            menu.style.top = event.clientY - this.element.getBoundingClientRect().top + 'px';
+
             menu.classList.add('dplayer-menu-show');
 
+            const clientRect = this.element.getBoundingClientRect();
+            const menuLeft = event.clientX - clientRect.left;
+            const menuTop = event.clientY - clientRect.top;
+            if (menuLeft + menu.offsetWidth >= clientRect.width) {
+                menu.style.right = clientRect.width - menuLeft + 'px';
+                menu.style.left = 'initial';
+            }
+            else {
+                menu.style.left = event.clientX - this.element.getBoundingClientRect().left + 'px';
+                menu.style.right = 'initial';
+            }
+            if (menuTop + menu.offsetHeight >= clientRect.height) {
+                menu.style.bottom = clientRect.height - menuTop + 'px';
+                menu.style.top = 'initial';
+            }
+            else {
+                menu.style.top = event.clientY - this.element.getBoundingClientRect().top + 'px';
+                menu.style.bottom = 'initial';
+            }
+
             mask.classList.add('dplayer-mask-show');
             mask.addEventListener('click', () => {
                 mask.classList.remove('dplayer-mask-show');

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.