博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拖拽你会吗,啊?会吗? 会!撸一个照片墙
阅读量:5876 次
发布时间:2019-06-19

本文共 1248 字,大约阅读时间需要 4 分钟。

二话不说先上图

效果就是这样,感兴趣,走起! github源码在

先看下需求

  • 按下后选中图片背景色变为深蓝色,被碰撞的图片背景色变红,位置变化完成后颜色变成原始色
  • 没有碰撞,位置复原;多个碰撞和接触面积最大的交换位置
  • 交换位置时,选中的图片在最上层划过去

别废话,告诉我怎么实现

  • 图片绝对定位,记录鼠标点下去后的起始位置和抬起位置,通过修改图片的topleft值完成移动
  • 鼠标按下记录下鼠标位置和选中图片的位置,柯里化处理this指向
  • 浏览器默认元素是不能拖拽的,想要拖拽就得取消浏览器的默认行为event.preventDefault
  • 拖拽开始时改变被选中图片的z-Index确保在其他图片上移动
  • 移动过程中检测有无和其他图片的碰撞,有,改变碰撞图片的背景色
  • 拖拽结束,和接触面积最大的图片交换位置或者回原来位置

页面结构

复制代码

页面初始化

为了方便,操作DOM我用的jquery

let boxList = $('#box>li');let zIndex = 0;//进入页面先记录下每个图片的初始位置,并绑定事件for (let i = boxList.length - 1; i >= 0; i--) { // 为了防止float塌陷,从最后一张图片开始设置CSS属性    let curLi = boxList[i];    // 记录下最开始的top和left值    curLi.originTop = curLi.offsetTop;     curLi.originLeft = curLi.offsetLeft;    $(curLi).css({        position: "absolute",        margin: 0, //绝对定位的时候就不需要margin了        top: curLi.originTop,        left: curLi.originLeft    });    $(curLi).on("mousedown", down);    $(curLi).on("dragstart", increaseIndex);    $(curLi).on("dragstart", preventDefault);    $(curLi).on("drag", boxMove);    $(curLi).on("drag", preventDefault);    $(curLi).on("dragend", changePos);    $(curLi).on("dragend", preventDefault);}复制代码

如果不太清楚offsetTop,offsetLeft,e.pageX,e.pageY可以参考

更多源码猛戳

转载地址:http://bjkix.baihongyu.com/

你可能感兴趣的文章
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
[Spark][Python]Spark Join 小例子
查看>>
form表单下的button按钮会自动提交表单的问题
查看>>
大战设计模式【11】—— 模板方法模式
查看>>
springBoot介绍
查看>>
Intellij IDEA 快捷键整理
查看>>
Redis 通用操作2
查看>>
11. Spring Boot JPA 连接数据库
查看>>
洛谷P2925 [USACO08DEC]干草出售Hay For Sale
查看>>
MapReduce工作原理流程简介
查看>>
那些年追过的......写过的技术博客
查看>>
小米手机解锁bootload教程及常见问题
查看>>
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>
CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>