<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>可拖动的便笺</title>
<link rel="stylesheet" href="./css/index.css" />
</head>
<body>
<div class="note">
<div class="move-bar"></div>
<div class="content" contenteditable="">
<p>这是一个便笺</p>
<p>里面的文字可以更改</p>
<p>用鼠标按住顶部的移动条即可拖动便笺</p>
</div>
</div> <script src="./js/index.js"></script>
</body>
</html>
// 让便签可被拖动,但不能超出视口

var note = document.querySelector('.note');
var moveBar = document.querySelector('.move-bar'); moveBar.onmousedown = function(event){
var startX = event.clientX; //鼠标按下的开始 离视口的左边位置
var startY = event.clientY;//鼠标按下的开始 离视口的头部位置
var noteRect = note.getBoundingClientRect();
console.log(noteRect)
console.log(note.clientWidth)
console.log(note.clientHeight)
var maxX = document.documentElement.clientWidth - note.clientWidth;
var maxY = document.documentElement.clientHeight - note.clientHeight;
window.onmousemove = function(e){
var endX = e.clientX;//鼠标移动 离视口的左边位置
var endY = e.clientY;//鼠标移动 离视口的头部位置
var offsetX = endX - startX; //最终的偏移量
var offsetY = endY - startY; //最终的偏移量
var left = noteRect.left + offsetX;
var top = noteRect.top + offsetY;
if(left < 0){
left = 0
}
if(top<0){
top = 0
}
if(left > maxX){
left = maxX;
}
if(top > maxY){
top = maxY;
}
// note.style.left = noteRect.left + offsetX + 'px';
// note.style.top = noteRect.top + offsetY + 'px';
note.style.left = left + 'px';
note.style.top = top + 'px';
console.log("startX:"+startX,"startY"+startY,"endX:"+endX,"endY:"+endY,"offsetX:"+offsetX,"offsetY:"+offsetY);
console.log("left:"+left,"top:"+top);
}
window.onmouseup = function(){
//鼠标抬起时清除事件
window.onmousemove = null;
window.onmouseup = null;
}
}

原生js元素拖动效果的更多相关文章

  1. 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)

    虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ...

  2. 原生JS实现拖动滑块验证登录效果

    ♀分享一组利用原生JS实现拖动滑块验证效果 ♀在这个组代码中涉及三个方面的知识: ⑴事件处理 ⑵添加验证标记 ⑶选择器的封装   代码如下: <!DOCTYPE html> <htm ...

  3. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  4. 原生JS实现分页效果1.0

    不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...

  5. 原生JS元素怎么取消事件

    关于原生JS元素怎么取消事件,有3种方式 常规方法:removeEventListener 案例: <body> <div id="myDIV"> div ...

  6. 原生JS实现弹幕效果

    纯属无聊写的,可能有很多问题,欢迎批评指教. 效果图:图一是预设的一些弹幕,图二是自己发射的弹幕,效果是一样的.   首先是弹幕的位置,是要从最右滑到最左,为了防止随机高度弹幕会覆盖的问题,设置了通道 ...

  7. 原生JS实现"旋转木马"效果的图片轮播插件

    一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...

  8. 再谈React.js实现原生js拖拽效果

    前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...

  9. 原生js实现拖动滑块验证

    拖动滑块验证是现在的网站随处可见的,各式各样的拖动法都有. 下面实现的是某宝的拖动滑块验证: <!DOCTYPE html> <html lang="en"> ...

  10. 原生js实现的效果

    原生js实现tooltip提示框的效果   在js的世界里面,每一个小的特效都那么微不足道,却又那么的令人向往与好奇.前端工程师的任务特别高大上,因为他们的一个小小的设计就会激发别人的求知欲.比如说我 ...

随机推荐

  1. cgo:go数组转c数组调用c函数

    package main /* #include <stdio.h> void processInt2DArray(int* arr, int rows, int cols) { for ...

  2. Codeforces 4 A-D

    题面 A B C D 难度:红 橙 橙 黄 题解 A 题目大意: 判断一个正整数 \(w\) 能否表示成两个正偶数之和. 解题思路: 考虑分类讨论 \(w\). 对于 \(1\) 和 \(2\),显然 ...

  3. 题解:CF507C Guess Your Way Out!

    CF507C Guess Your Way Out! 题解 算法 模拟 思路 按照左右左右的方式先往下找,每次找到一个子节点时就看此节点为根的子树是否包含目标节点,如果包含就继续往下走,不包含说明目标 ...

  4. .NET 9正式发布,亮点是.NET Aspire和AI

    Microsoft 今天正式发布了 .NET 9,这是迄今为止最高效.最现代.最安全.最智能.性能最高的 .NET 版本.这是来自世界各地的数千名开发人员又一年努力的结果.此新版本包括数千项性能.安全 ...

  5. AT cf17 final J Tree MST

    AT cf17 final J Tree MST 考场上想出的黑题,然而写挂了-- 思路 考场推出 boruvka 算法,会的直接跳过就好. 结论:一个点向另外一个点连出的最小边,一定在最小生成树上. ...

  6. axios获取上传进度报错xhr.upload.addEventListener is not a function

    错误问题 Vue:xhr.upload.addEventListener is not a function 这个问题是因为mockjs改动了axios里面XMLHttpRequest对象致使的 根据 ...

  7. golang之设计模式

    [选项模式] package main import "fmt" type OptionFunc func(*DoSomethingOption) type DoSomething ...

  8. st包无效

    本机正常安装了 oracle11g  和 ArcSDE10, 想要查询某个空间图层表的shape字段值,所以写了如下sql语句在PL/SQL里执行,select sde.st_astext(shape ...

  9. k8s强制删除pod节点

    场景 突然get pod的时候,发现一堆的错误,得把它干掉,否则很不爽. 解决方案 正常过期的状态,比如Evicted ,用正常指令 kubectl -n jingu get pods | grep ...

  10. 理解 ASP.NET Core: Host

    dotnet core 非常好用,代码也及其精炼,但是,你真的搞懂了每一行代码背后的含义了吗? 本文希望能够深入浅出地梳理一下它的脉络,把它从神秘变成水晶一般透明. 本文关注于分析 Pragram.c ...