diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2020-10-25 11:01:03 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2020-10-25 11:01:03 +0900 |
| commit | 4bfa29c0abb68b217b486a75f48316da1b56e621 (patch) | |
| tree | ebb685302569ec6d06544ef7f9eebeb4076f109d /src/client | |
| parent | インポート/エクスポート設定を復活 (diff) | |
| download | sharkey-4bfa29c0abb68b217b486a75f48316da1b56e621.tar.gz sharkey-4bfa29c0abb68b217b486a75f48316da1b56e621.tar.bz2 sharkey-4bfa29c0abb68b217b486a75f48316da1b56e621.zip | |
コンテキストメニューの位置計算を改善
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/components/ui/context-menu.vue | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/client/components/ui/context-menu.vue b/src/client/components/ui/context-menu.vue index 3a11589e8a..1b4d386ebd 100644 --- a/src/client/components/ui/context-menu.vue +++ b/src/client/components/ui/context-menu.vue @@ -35,8 +35,30 @@ export default defineComponent({ }, }, mounted() { - this.$el.style.top = this.ev.pageY + 'px'; - this.$el.style.left = this.ev.pageX + 'px'; + let left = this.ev.pageX + 1; // 間違って右ダブルクリックした場合に意図せずアイテムがクリックされるのを防ぐため + 1 + let top = this.ev.pageY + 1; // 間違って右ダブルクリックした場合に意図せずアイテムがクリックされるのを防ぐため + 1 + + const width = this.$el.offsetWidth; + const height = this.$el.offsetHeight; + + if (left + width - window.pageXOffset > window.innerWidth) { + left = window.innerWidth - width + window.pageXOffset; + } + + if (top + height - window.pageYOffset > window.innerHeight) { + top = window.innerHeight - height + window.pageYOffset; + } + + if (top < 0) { + top = 0; + } + + if (left < 0) { + left = 0; + } + + this.$el.style.top = top + 'px'; + this.$el.style.left = left + 'px'; for (const el of Array.from(document.querySelectorAll('body *'))) { el.addEventListener('mousedown', this.onMousedown); |