Semblable à cet effet, déplacez la souris et tirez une case p pour sélectionner l'élément dom couvert par p.
Avez-vous de bonnes idées qui pourraient être mises en œuvre
La méthode que j'ai proposée consiste à juger le offsetLeft, offsetTop de p et le offsetLeft, offsetTop de chaque élément qui doit être sélectionné. Si l'élément dom est plus petit que le offsetLeft+Top de p, il est sélectionné par le cadre. .
Mais le problème est que vous devez parcourir la valeur d'attribut de décalage de chaque élément à chaque fois. Parce qu'il y a beaucoup d'éléments, il y en a des centaines 1. L'obtention de la valeur d'attribut provoquera beaucoup de reflux, 2. C'est trop. à juger à chaque fois.
Je veux donc réfléchir et demander si quelqu'un a une meilleure solution
J'ai déjà cherché l'effet d'un disque réseau et je voulais l'exprimer de manière vivante, mais celui-ci était relativement simple, et la scène était vraiment un peu plus compliquée
Cela dépend de la façon dont vous le considérez, je vous propose une méthode simple,
Lorsque vous déplacez la souris, récupérez e.target et enregistrez-le, puis filtrez ceux que vous souhaitez via la fonction function, c'est aussi simple que cela# 🎜🎜 #
Prenons Baidu Netdisk comme exemple. Mon idée est la suivante : comme la hauteur de chaque élément de la liste est fixe, il vous suffit de comparer l'intersection du rectangle formé lorsque la souris est déplacée avec le rectangle de l'élément de liste entier et le montant. de calcul sera beaucoup plus petit.
La méthode spécifique est la suivante :
Lorsque
mousedown, calculez l'index de l'élément de liste de départ
2. (offsetTop of
起始的列表项
+ offsetTop of mouseup) / hauteur de l'élément de liste, puis plafonnez le résultat pour obtenir le numéro sélectionné.Nous avons l'index de l'élément de la liste de départ et le nombre d'éléments sélectionnés, il est donc facile de calculer quels éléments sont sélectionnés.
La hauteur du conteneur parent, la hauteur de l'élément scrollTop/list du conteneur parent est fixe, le haut relatif du rectangle et la hauteur du rectangle
Ces variables devraient suffire
Ce qui précède est la logique complète, veuillez essayer d'écrire le code vous-même !