使用cookie记忆拖拽的div的位置:js实现

Karate整合Playwright:统一API与UI自动化测试的技术实践 自动化测试是现代软件工程保障质量的核心环节,其原理在于通过脚本模拟用户操作或系统交互,验证软件行为的正确性。在技术价值上,它能提升测试效率、确保回归测试覆盖率,并支持持续集成与交付。常见的应用场景包括接口契约测试、用户界面验证以及端到端的业务流程检验。本文聚焦于如何利用Karate框架内置的Playwright驱动能力,通过一套简洁的领域特定语言(DSL)来编写和执行UI自动化测试,实现技术栈的统一。该方案尤其适用于已经采用Karate进行API测试的团队,能显著降低维护成本,并支持API与UI测试的无缝融 阅读详情

前言:实现鼠标拖拽移动div位置,当一次移动完成,鼠标键抬时,此时的位置属性值存入cookie。刷新页面,从新从cookie中取出div的位置属性值,从而实现对div位置的记忆。

1.页面代码:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .box {
                position: absolute;
                width: 200px;
                height: 200px;
                border-radius: 15px;
                background-color: #E8CCFF;
            }
        </style>
    </head>

    <body>
        <div class="box"></div>
        <script src="cookie.js"></script>
        <script>
           
            var box = document.querySelector(".box"); //获取元素
            //上来我们先判断是否有位置信息的cookie,
            //有的话获取cookie中的div的位置属性值,并将当前div的位置属性值设置为此
            if(getCookie("positionDatas")){
            
                let positionDatas = JSON.parse(getCookie("positionDatas"));
            positionDatas.forEach((item)=>{
                box.style.left  = item.left;
                box.style.top = item.top;
            });
            }
            

            var x, y; //鼠标相对与div左边,上边的偏移
            var isDrop = false; //移动状态的判断鼠标按下才能移动
            box.onmousedown = function(e) {
                var e = e || window.event; //要用event这个对象来获取鼠标的位置
                x = e.clientX - box.offsetLeft;
                y = e.clientY - box.offsetTop;
                isDrop = true; //设为true表示可以移动
            }

            document.onmousemove = function(e) {
                //是否为可移动状态                                   
                if(isDrop) {    
                    var e = e || window.event;                      
                    var moveX = e.clientX - x; //得到距离左边移动距离                      
                    var moveY = e.clientY - y; //得到距离上边移动距离
                    //可移动最大距离
                    var maxX = document.documentElement.clientWidth - box.offsetWidth;
                    var maxY = document.documentElement.clientHeight - box.offsetHeight;

                    //范围限定  当移动的距离最小时取最大  移动的距离最大时取最小                   
                    moveX=Math.min(maxX, Math.max(0,moveX));
                    moveY=Math.min(maxY, Math.max(0,moveY));
                    box.style.left = moveX + "px";  
                    box.style.top = moveY + "px";          
                } else {
                    return;          
                }

            }
            //鼠标抬起时,将div的当前位置存储到cookie中去
            document.onmouseup = function() {
                isDrop = false; //设置为false不可移动
                if(getCookie("positionDatas")){
                    var positionDatas = JSON.parse(getCookie("positionDatas"));
                    positionDatas.forEach((item) =>{
                         item.left = box.style.left;
                         item.top = box.style.top;
            })
                }else{
                    var positionDatas = [{left:0,top:0}]
                }
            //■■■这里用来存入cookie的数据是我们移动后已经改变过位置信息值的positionDatas■■■    
            setCookie("positionDatas",JSON.stringify(positionDatas),7);
   
            }
        </script>
    </body>

</html>

2.封装的cookie相关操作API

/**创建cookie 
 * @param name  <string> 要存的cookie名
 * @param val   <string> 要存的cookie值
 * @param n     <string> cookie的有效天数
 */
function setCookie(name, val, n) {
  let oDate = new Date();
  oDate.setDate(oDate.getDate() + n);
  document.cookie = name + "=" + escape(val) + ";expires=" + oDate;
}

/**获取cookie 的值
 * @param name  <string> 要获取的cookie名
 */
function getCookie(name) {
  let strCookie = document.cookie;
  let arrCookie = strCookie.split("; ");

  for (let i = 0; i < arrCookie.length; i++) {
    let arr = arrCookie[i].split("=");
    if (arr[0] == name) {
      return unescape(arr[1]);
    }
  }
}
/**删除cookie  原理:将当前cookie的有效时间设置为任何过去的时间
 * @param name  <string> 要删除的cookie名
 */
function removeCookie(name) {
  setCookie(name, 1, -1);
}
Claude Cowork国内落地实战:办公自动化与AI Agent开发全指南 Claude Cowork并非传统聊天工具,而是具备本地文件直连、子代理协同与持久化项目空间的AI任务执行引擎。其核心原理在于将模糊业务目标(如‘整理会议纪要’)自动拆解为OCR识别、结构化映射、模板填充等可执行步骤,并在隔离沙箱中调用Python、PowerShell、COM组件等原生能力。技术价值体现在摆脱网络依赖、实现数据不出域的端到端自动化,显著提升办公提效与LLM工程落地可靠性。典型应用场景包括行政文档智能归档、周报自动生成、采购审批Agent构建等。本文聚焦国内真实环境下的硬件虚拟化启用、中文路 阅读详情

相关推荐

【前端面试知识题】- 3. HTML && CSS

BFC是CSS布局的一个概念,是一个独立的渲染区域,规定了内部box如何布局, 并且这个区域的子元素不会影响到外面的元素,其中比较重要的布局规则有内部 box 垂直放置,计算 BFC 的高度的时候,浮动元素也参与计算。来调整图片的位置,不过HTTP2不适用,原因为HTTP2实际上是多路复用的,只用一个TCP连接,所以多个图片的请求也是在同一个TCP连接里,这样能省下非常多的请求时间,但坏处就是单连接开销很大,如果要传多个大文件,就很麻烦。面对经济的下行和大学生毕业人数的突增,现在的就业状况极其严峻。

拉格朗日的学习笔记 6302

JS实现拖拽元素交换位置

源码:js-essays/draggable 基本效果展示: 基本思路: 使元素可以被拖拽(利用 draggable 属性, 注意:链接和图片默认是可拖拽的) 拖拽时,通过被拖拽节点和其他节点的drag事件交互,来切换两个节点的位置(非唯一方法) 添加用户拖拽交互效果 用到的方法: ondrag 事件在元素或者选取的文本被拖动时触发。 在拖动目标上触发(源目标元素): ondragstart - 用户开始拖动元素 ondrag - 元素正在被拖动 ondragend - 用户结束元素拖动

艾欢欢的博客 5005

div 拖动+cookie保存

网站个性化 div可以随意拖动 cookie保存!

html 记住位置,原生js完美拖拽,每次刷新可以记住上次拖拽的位置

原生代码片段 1/p>借助cookie来记住每次拖拽结束的位置代码片段 2-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>无标题文档function setCookie(name,value,expires){var oDate=new D...

weixin_29194255的博客 379

js控制多个div拖拽和拖动、且能保存数据至cookie、数据库、xml

界面好看 效果绚丽 拿来即用 js实现DIV自定义拖拽并且保存的例子 非常适合web2.0开发使用 如果配合jquery效果更好 且能保存数据至数据库、cookie、xml等

JS拖拽DIV后保存位置示例

本实例从通达OA工作桌面提取,包括js、css,浏览空白时,请将浏览器编码改为UTF-8

用html+js实现图片拖拽切换位置【错过就后悔系列】

在很多网页里面,有些图片位置摆放不对,那我们想手动的拖拽然后切换图片的位置,这种效果看着简单,实则并不容易,那么该如何去做呢,博主在这里进行一段分享,无毒可直接食用。

小魏快起床的博客 1695

JS可以任意拖动位置的窗口(读写cookies保留位置)

在浏览器中形成一个可以任意拖动位置的窗口,窗口位置存储在cookies中(也可以使用Ajax存储到数据库中),刷新后窗口位置不变。IE5+有效

js拖拽添加html dom,JavaScript实现DIV层拖动及动态增加新层的方法

本文实例讲述了JavaScript实现DIV层拖动及动态增加新层的方法。分享给大家供大家参考。具体分析如下:无刷新添加一个新的DIV层,并可实现的该层的拖动,鼠标拖动层可移动位置,将JS部分另存为一个新文件,用到的时候从外部引入,这个拖动层代码很流行,GG和YAHOO等大网站经常可以看到这种效果。DIV层拖动,动态增加新层的JavaScriptbody {margin:0px;padding:0p...

weixin_42347486的博客 452

JavaScript实现自动弹出窗口并自动关闭窗口的方法

本文实例讲述了JavaScript实现自动弹出窗口并自动关闭窗口的方法。分享给大家供大家参考。具体如下: 这里介绍的JavaScript自动弹出窗口并自动关闭窗口,JS实现此特效似乎很简单,打开网页后即显示一个弹出窗口,之后会自动离开,使用了window.open和document.open();以及document.close();对象共同来实现,现在似乎用的不多了。 运行效果如下图所示: 具体代码如下: <HTML> <HEAD> <TITLE>自动离开的窗口</TITLE> [removed] <!-- var flyingwin var popupwidth=200 var popu

Xlinx PG151 除法器IP 笔记

对Xlinx 除法器IP PG151中部分内容记录备忘。

weixin_50515160的博客 2528

弹框可拖拽,松开鼠标后停留在当前位置

js部分 // 弹框拖拽效果 directives: { drag:{ // 指令的定义 inserted: function(el) { // el.drag(); console.log(el); //获取元素 // var dv = document.getElementById("dv"); let x = 0; let y = 0; let l .

yigeboke的博客 482

器件物理与工艺:揭秘MOSFET寄生电容Cgd/Cgs的微观结构及演变

本文深入解析MOSFET寄生电容Cgd与Cgs的微观物理结构及其在开关过程中的非线性演变,重点探讨由Cgd反馈效应引发的米勒平台现象。通过分析器件物理机制与先进工艺技术,揭示电容特性对开关性能的影响,并提供工艺优化与设计策略,助力提升高频功率应用的效率与稳定性。

desk3的博客 1083

jQuery配合cookie实现拖拽运动记忆小方块

jQuery配合cookie实现拖拽运动记忆小方块 简单实现物体拖拽运动并在关闭浏览器后 下次打开浏览器,物体保留在原来的位置 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>记忆小方块</title> <style type="te...

weixin_44414835的博客 245

Arm A-profile架构RAS系统设计:可靠性、可用性与可服务性解析

在计算机体系结构中,可靠性(Reliability)、可用性(Availability)和可服务性(Serviceability)是构建高可信系统的核心要素。RAS系统通过硬件错误检测、隔离和恢复机制,确保系统持续稳定运行。其技术原理包括ECC内存纠错、冗余执行单元和错误传播阻断等关键技术,可显著降低数据中心等关键业务场景的故障率。现代芯片设计中,Arm A-profile架构提供标准化的RAS框架,涵盖从内存子系统到计算单元的全方位错误管理。通过分层防御策略和统一错误记录格式,实现硬件错误可追溯、可修复。

weixin_30920853的博客 358

Android 11系统定制:如何彻底隐藏状态栏电池图标(RK3568实测)

本文详细解析了在Android 11系统上如何通过多维度修改实现状态栏电池图标的彻底隐藏,特别针对RK3568平台提供了实战指南。从系统UI架构解析到核心配置文件修改,再到进阶技巧与疑难排查,帮助开发者深度定制Android系统,满足特定场景需求。

weixin_29250573的博客 376

拖拽小方块和cookie的结合

直接po代码:cookie是和服务器进行交互使用的,所以不允许本地文件使用哟~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, init...

weixin_30525825的博客 141

吃透 AM32 无人机电调:从源码架构到工作原理的全方位解析(附实践指南)(上)

本文深入解析了AM32电调固件的源码架构与核心模块实现。文章首先介绍了AM32电调作为开源无人机;动力心脏的重要地位,随后从硬件基础、源码目录、模块划分三个维度构建解析框架。重点剖析了系统初始化模块的时钟配置、GPIO初始化和定时器设置,以及FOC控制模块的坐标变换算法、角度估算和SVPWM生成等关键技术实现。通过逐行代码解析,揭示了电调如何将飞控指令转换为电机驱动的完整过程,为开发者理解AM32电调工作原理提供了系统性指导。

bother3000的博客 6563

拖拽框

html> lang="en">     charset="UTF-8">     综合案例             #container{position: absolute;display:none;width:400px;height:300px;border:1px solid #ccc;border-radius:10px;}         #sp{padding-r

qwe5566800的博客 279

HP MSA 2050磁盘阵列配置步骤

一、盘阵与服务器直接连接 1.1 单控制器配置:一台服务器/ 一个 HBA/ 单路径 1.2 双控制器配置:两台服务器/ 每台服务器一个 HBA/ 双路径 二、通过交换机(一般光纤交换机) 2.1 双控制器配置:两台服务器/ 两台交换机 三、配置MSA2050 3.1在完成硬件安装后,可以访问控制器模块的基于 Web 的管理界面 SMU (存储 管理实用程序),以便监视和管理此存储系统。 首先...

jw5493的博客 1万+

Camunda 7.x 系列【62】启动流程实例源码解析

为了更好的了解Camunda,接下来我们简单分析下启动流程实例相关源码

记录知识、锤炼自我 1174

进度条

我们常见页面上的进度条,当你这次进度到这里,下次打开网页还是显示进度到的部分。这是为什么呢?可能会有朋友不晓得是怎么做出来的。今天我们就来一起揭开它的神秘面纱。 第一步 在HTML > body部分写好基本结构并写好基本CSS样式 <style> #slider{width: 600px; height: 30px; border: 1px solid black; marg...

Maohei997的博客 424

【电机应用控制】——直流有刷电机&驱动板/编码器介绍&PID算法&实操代码思路

声明:学习笔记来自正点原子B站教程,仅供学习交流!!玩具车、平衡车、无人机、印刷机、打印机、手机振动马达等电机即电动机(motor),也叫作马达,电能转化为机械能。按电源:直流、交流按用途:驱动用、控制用按运转速度:高速、低速、恒速、调速直流电机(有刷、无刷)、舵机、步进电机、伺服电机1、直流有刷电机(Brushed DC Motor,简称BDC)是内含电刷装置的将直流电能转化为机械能的电动机。例如四驱赛车四个马达操控方便、成本低、维护时换电刷即可;

weixin_51658186的博客 2万+

Gumloop:AI原生自动化如何重塑RPA边界

AI原生自动化是一种以大语言模型为认知核心、面向动态业务场景的智能执行范式,它突破传统RPA依赖预设规则与静态流程的局限,通过意图解析、动态执行图和上下文记忆实现对非结构化输入、多变界面和模糊语义的理解与响应。相比AI-Powered工具仅在环节中叠加AI能力,AI原生自动化从架构底层重构人机协作逻辑,将任务表达简化为自然语言指令,显著降低使用门槛并提升鲁棒性。其技术价值体现在快速适配网页变更、跨格式文档理解(如PDF/Excel)、语义化分类决策等典型场景,广泛适用于客服邮件处理、HR简历解析、电商退货单

weixin_30443075的博客 370

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

GPT-4o免费工作流:零代码实现类GPT-5级傻瓜式AI办公

大语言模型的实用价值正从‘能对话’跃迁至‘能办事’,其核心不在于参数规模升级,而在于交互范式重构与使用门槛压缩。GPT-4o作为当前OpenAI官方免费开放的最先进多模态模型,已具备低延迟、高响应质量与原生语音图像理解能力;依托浏览器端轻量封装、结构化提示工程与自动化触发机制,可构建免API、免注册、免配置的落地工作流。该方案聚焦真实办公场景——合同审查、文书润色、会议纪要生成、报错诊断等,通过责任转移(如自动登录管理、上下文分段、格式标准化)实现‘一句话指令→结果直达’闭环,让非技术用户真正享受AI生产力

weixin_30394669的博客 327

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

从Prompt到Spec:AI编程范式的变革与规格驱动开发实践

在软件开发领域,需求规格说明(Specification)是定义系统功能、行为和约束的核心文档,它连接了产品设计与工程实现。随着AI编程助手的普及,传统的对话式Prompt编程在应对复杂系统构建时,逐渐暴露出上下文碎片化、系统思维缺失等局限性。规格驱动开发(Specification-Driven Development)作为一种更结构化的方法,通过将自然语言指令升级为机器可解析的规格文档,使AI能够全局理解需求并批量生成协调一致的代码,从而显著提升开发效率与代码质量。这一范式转变将开发者的角色从指令下达者

weixin_33717117的博客 413

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: indexOf( )和lastIndexOf( )方法(JS字符串检索)
下一篇: call( ) 、 apply( ) 、 bind( )的使用以及区别:
你的玄燁
博客等级 码龄7年 20粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值