Maison > interface Web > js tutoriel > Comment JavaScript peut-il implémenter le glisser d'une boîte pop-up tout en la limitant à la zone visible de la page ?

Comment JavaScript peut-il implémenter le glisser d'une boîte pop-up tout en la limitant à la zone visible de la page ?

WBOY
Libérer: 2023-10-18 12:26:14
original
606 Les gens l'ont consulté

JavaScript 如何实现弹出框的拖动的同时限制在页面可见区域内?

JavaScript Comment réaliser le glissement de la pop-up box tout en la limitant à la zone visible de la page ?

Dans le développement web, nous rencontrons souvent le besoin d'implémenter des boîtes pop-up ou des boîtes de dialogue. L'une des exigences courantes est de permettre à ces boîtes contextuelles de glisser librement et de se limiter à la zone visible de la page. Cet article explique comment utiliser JavaScript pour implémenter cette fonction et fournit des exemples de code correspondants.

Tout d’abord, nous devons comprendre quelques concepts de base. En développement Web, la zone visible de la page peut être représentée par la largeur et la hauteur de la fenêtre, qui correspondent respectivement à window.innerWidth et window.innerHeight. La position de la boîte contextuelle est généralement contrôlée à l'aide des propriétés left et top. Nous pouvons changer la position de la boîte contextuelle en modifiant ces deux propriétés. window.innerWidthwindow.innerHeight。而弹出框的位置通常使用left和top属性来控制,我们可以通过修改这两个属性来改变弹出框的位置。

接下来,我们将介绍具体的实现步骤。首先,我们需要一个事件监听器,在用户点击并按住弹出框的标题栏时触发。在这个事件监听器中,我们需要获取鼠标相对于弹出框的初始位置和弹出框的初始位置,以便后续的计算。

var dialog = document.getElementById("dialog");
var title = dialog.querySelector(".title");

var initialMouseX = 0;
var initialMouseY = 0;
var initialDialogX = 0;
var initialDialogY = 0;
var isDragging = false;

title.addEventListener("mousedown", function(e) {
  isDragging = true;
  initialMouseX = e.clientX;
  initialMouseY = e.clientY;
  initialDialogX = dialog.offsetLeft;
  initialDialogY = dialog.offsetTop;
});

document.addEventListener("mouseup", function() {
  isDragging = false;
});

document.addEventListener("mousemove", function(e) {
  if (isDragging) {
    var deltaX = e.clientX - initialMouseX;
    var deltaY = e.clientY - initialMouseY;
    var newDialogX = initialDialogX + deltaX;
    var newDialogY = initialDialogY + deltaY;

    // 限制在页面可见区域内
    var maxDialogX = window.innerWidth - dialog.offsetWidth;
    var maxDialogY = window.innerHeight - dialog.offsetHeight;
    newDialogX = Math.max(0, Math.min(newDialogX, maxDialogX));
    newDialogY = Math.max(0, Math.min(newDialogY, maxDialogY));

    dialog.style.left = newDialogX + "px";
    dialog.style.top = newDialogY + "px";
  }
});
Copier après la connexion

以上代码中,我们使用mousedown事件监听用户点击标题栏,mouseup事件监听释放鼠标按键,mousemove事件监听鼠标移动。在mousemove事件中,我们首先计算出鼠标相对于初始位置的偏移量,然后通过加上初始位置得到新的弹出框位置。

接下来,我们需要限制弹出框在页面可见区域内。为此,我们首先计算出右边界和下边界的最大位置,分别为页面宽度减去弹出框的宽度和页面高度减去弹出框的高度。然后,我们使用Math.maxMath.min

Ensuite, nous présenterons les étapes spécifiques de mise en œuvre. Tout d'abord, nous avons besoin d'un écouteur d'événements qui se déclenche lorsque l'utilisateur clique et maintient la barre de titre de la boîte contextuelle. Dans cet écouteur d'événements, nous devons obtenir la position initiale de la souris par rapport à la boîte contextuelle et la position initiale de la boîte contextuelle pour les calculs ultérieurs.

rrreee

Dans le code ci-dessus, nous utilisons l'événement mousedown pour surveiller l'utilisateur cliquant sur la barre de titre, l'événement mouseup pour surveiller le relâchement du bouton de la souris et le Événement mousemove pour surveiller le mouvement de la souris. Dans l'événement mousemove, nous calculons d'abord le décalage de la souris par rapport à la position initiale, puis obtenons la nouvelle position de la boîte contextuelle en ajoutant la position initiale.

Ensuite, nous devons limiter la boîte contextuelle à la zone visible de la page. Pour ce faire, nous calculons d'abord les positions maximales des bordures droite et inférieure, qui sont respectivement la largeur de la page moins la largeur de la boîte contextuelle et la hauteur de la page moins la hauteur de la boîte contextuelle. Ensuite, nous utilisons les fonctions Math.max et Math.min pour limiter la position de la nouvelle boîte contextuelle à la zone visible de la page. 🎜🎜Enfin, nous appliquons la nouvelle position du popup à l'élément DOM réel. 🎜🎜Ce qui précède explique comment utiliser JavaScript pour faire glisser la boîte contextuelle et la limiter à la zone visible de la page. Grâce à cette méthode, nous pouvons ajouter une expérience utilisateur plus flexible et conviviale à la page Web. Dans les projets réels, vous pouvez modifier et optimiser ce code en fonction de besoins spécifiques pour répondre à vos propres exigences. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal