当前位置: 首页> 游戏> 手游 > 中国人社app下载安装_区块链开发语言_seo指导_建一个app平台的费用多少

中国人社app下载安装_区块链开发语言_seo指导_建一个app平台的费用多少

时间:2025/7/11 18:40:06来源:https://blog.csdn.net/bingbingyihao/article/details/142308292 浏览次数:0次
中国人社app下载安装_区块链开发语言_seo指导_建一个app平台的费用多少

拖拽排序的实现示例demo

    • 文章说明
    • 核心代码
    • 示例效果展示

文章说明

文章主要为了学习拖拽排序的实现思路,并且采用此示例效果来进一步理解Flip动画的使用

参考渡一前端袁老师的讲解视频

核心代码

页面源码,拖拽排序的实现代码并不复杂,但是可以很好的帮助学习该示例的实现思路和拖拽API的使用

<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>拖拽排序</title><style>* {box-sizing: border-box;}.container {margin: 100px auto auto;width: 200px;}.container div {height: 30px;line-height: 30px;margin: 10px 0;background-color: chocolate;border-radius: 10px;color: #ffffff;text-align: center;}.container .moving {border: dashed 1px black;background-color: #ffffff;}</style></head><body><div class="container"><div draggable="true" class="item">1</div><div draggable="true" class="item">2</div><div draggable="true" class="item">3</div><div draggable="true" class="item">4</div><div draggable="true" class="item">5</div><div draggable="true" class="item">6</div></div><script src="flip.js"></script><script>const container = document.getElementsByClassName("container")[0];let dragElem = null;let flip;container.ondragstart = function (e) {flip = new Flip(container.children, 0.5);dragElem = e.target;setTimeout(() => {e.target.classList.add("moving");}, 0);}container.ondragover = function (e) {e.preventDefault();}container.ondragend = function (e) {e.target.classList.remove("moving");}container.ondragenter = function (e) {e.preventDefault();if (e.target === container || dragElem === e.target) {return;}const children = [...container.children];const sourceIndex = children.indexOf(dragElem);const targetIndex = children.indexOf(e.target);if (sourceIndex > targetIndex) {container.insertBefore(dragElem, e.target);} else {container.insertBefore(dragElem, e.target.nextElementSibling);}flip.play();}</script></body>
</html>

Flip工具类

class Flip {children = null;delay = 0;constructor(children, delay = 1) {this.children = children;this.calculatePos();this.delay = delay;}calculatePos(name = "first") {const children = this.children;for (let i = 0; i < children.length; i++) {children[i][name] = children[i].getBoundingClientRect();}}play() {this.calculatePos("last");const children = this.children;for (let i = 0; i < children.length; i++) {const first = children[i]["first"];const last = children[i]["last"];if (first.x !== last.x || first.y !== last.y) {children[i].style.transform = `translateY(${first.y - last.y}px) translateX(${first.x - last.x}px)`;setTimeout(() => {children[i].style.transition = `transform ${this.delay}s`;children[i].style.removeProperty("transform");setTimeout(() => {children[i].style.removeProperty("transition");this.calculatePos();}, this.delay * 1000);}, 0);}}}
}

示例效果展示

拖拽功能展示
在这里插入图片描述

关键字:中国人社app下载安装_区块链开发语言_seo指导_建一个app平台的费用多少

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: