JS——拖拽盒子
注意事项:
1、opacity是全部元素变透明,rgba只是背景色变透明
2、先是注册鼠标按下的事件,此时就需要记录鼠标在盒子中的坐标
3、再在鼠标按下事件中注册鼠标移动事件,此时鼠标的坐标是不断变化的,盒子的坐标就是鼠标的坐标减去鼠标在盒子的坐标
4、top.onmousemove = function (ev) {},top也可以换成document,主要考虑的是鼠标移动的太快出了盒子,改为document可以继续维持这个事件
5、在top.onmousemove中必须取消文本被选中,不然拖拽的时候,如果选中了文字,会出现bug,选中的文字会首先被拖走,影响效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
padding: 0;
margin: 0;
} .box {
width: 200px;
height: 180px;
background-color: #ccc;
position: absolute;
top: 100px;
left: 200px;
} .top {
height: 30px;
text-align: center;
font: 400 15px/30px "simsun";
background-color: pink;
cursor: move;
}
</style>
</head>
<body>
<div class="box">
<div class="top">点击此处拖拽盒子</div>
</div>
<script>
var box = document.getElementsByTagName("div")[0];
var top = box.children[0];
//点击盒子 然后拖拽
//鼠标左键点击事件 鼠标移动事件
top.onmousedown = function (ev) {
ev = ev || window.event;
//1、鼠标的坐标
var pageX = ev.pageX || scroll().left + ev.clientX;
var pageY = ev.pageY || scroll().top + ev.clientY;
//2、鼠标在盒子中的坐标
var x = pageX - box.offsetLeft;
var y = pageY - box.offsetTop;
top.onmousemove = function (ev) {
//3、进入onmousemove事件,鼠标左边不断更新
var pageX = ev.pageX || scroll().left + ev.clientX;
var pageY = ev.pageY || scroll().top + ev.clientY;
ev = ev || window.event;
box.style.left = pageX - x + "px";
box.style.top = pageY - y + "px";
box.style.opacity = 0.4;
//取消文本被选中
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
}
} //解绑
top.onmouseup = function () {
top.onmousemove = null;
box.style.opacity = 1;
} function scroll() {
return {
"top": window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop,
"left": window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft
};
}
</script>
</body>
</html>
JS——拖拽盒子的更多相关文章
- 再谈React.js实现原生js拖拽效果
前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于 JS 拖拽功能的冲突问题及解决方法
前言 我在之前写过关于 JS 拖拽的文章,实现方式和网上能搜到的方法大致相同,别无二致,但是在一次偶然的测试中发现,这种绑定事件的方式可能会和其它的拖拽事件产生冲突,由此产生了对于事件绑定的思考.本文 ...
- js拖拽分析
js拖拽分析 思路 1.三个鼠标事件,mousedown,mousemove,mouseup 2.可移动性absolute 3.边界限制 得到鼠标点击处和div边界的距离,然后得出top 和 left ...
- JS拖拽div(移动)
<!doctype html><html><head> <meta charset="utf-8"> <title>JS ...
- 浅谈js拖拽
本文来自网易云社区 作者:刘凌阳 前言 本文依据半年前本人的分享<浅谈js拖拽>撰写,算是一篇迟到的文章. 基本思路 虽然现在关于拖拽的组件库到处都是,HTML5也把拖放纳入了标准.但考虑 ...
- 一步一步实现JS拖拽插件
js拖拽是常见的网页效果,本文将从零开始实现一个简单的js插件. 一.js拖拽插件的原理 常见的拖拽操作是什么样的呢?整过过程大概有下面几个步骤: 1.用鼠标点击被拖拽的元素 2.按住鼠标不放,移动鼠 ...
- 原生js拖拽、jQuery拖拽、vue自定义指令拖拽
原生js拖拽: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
随机推荐
- NOIP2013 提高组合集
NOIP 2013 提高组 合集 D1 T1 转圈游戏 快速幂裸题 #include <iostream> #include <cstdio> #include <cst ...
- Asp.Net页面生命周期[转]
一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页 ...
- iOS xmpp协议实现聊天之openfire的服务端配置(二)
本篇主要说一下怎样利用命令行来正确配置MySql. 首先打开终端: 1.为mysql起一个别名 alias mysql=/usr/local/mysql/bin/mysql 2.创建mysql的管理员 ...
- Ajax异步方式实现登录与參数的校验
登录代码 这个是使用Bootstrap3的组件功能实现的 <div class="login_con_R"> <h4>登录</h4> <F ...
- hdu 2255奔小康赚大钱 KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=2255 一,KM算法:(借助这个题写一下个人对km的理解与km模板) KM算法主要是用来求解图的最优匹 ...
- Swift 进阶
iOS开发系列--Swift进阶 2015-09-21 00:01 by KenshinCui, 3072 阅读, 12 评论, 收藏, 编辑 概述 上一篇文章<iOS开发系列--Swift语言 ...
- C# 文件里的类不能进行设计,因此未能为该文件显示设计器
C# 文件里的类不能进行设计,因此未能为该文件显示设计器 vs 一直打不开设计界面 仅仅能查看代码界面 这时候须要查看 代码中 是不是 从 form 继承 假设不是 窗口类型 改为 fo ...
- 字节数组byte[]和整型,浮点型数据的转换——Java代码
近期在写C++ socket和java socket之间的通信程序,涉及到整数浮点数的传输.须要从字节数组还原数据,查了一些资料.总结例如以下 1. 整数和浮点数的机器表示 在机器内部.不 ...
- Linux ALSA声卡驱动之七:ASoC架构中的Codec
1. Codec简介(ad/da) 在移动设备中,Codec的作用可以归结为4种,分别是: 对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号 对Mic.Linein或者其他输入源的模拟信 ...
- 超级有用的git reset --hard和git revert命令
很多时候,git新手容易误操作,比如,在levelIISZ-1.4.dev分支下,运行了git pull idc cpp-1.0的结果,这样做麻烦很大,经常导致maven项目格式不正确,这个时候,可以 ...