页面元素的拖拽

实现页面元素颜色的HTML5拖拽互动特效 在第一章中,我们将对HTML5拖放API进行基础性介绍。HTML5拖放(Drag and Drop)API是Web应用中一种简洁而强大的用户交互手段,它允许用户通过拖拽的方式轻松地在网页上对元素进行排序、移动、传输数据。HTML5拖放API涉及一系列的事件,如dragstartdragoverdrop等,这些事件支持拖拽操作的整个流程。开发者通过监听这些事件并进行适当的处理,能够实现元素的拖拽移动以及拖拽时的自定义行为。 阅读详情
  • 页面元素拖拽 -- HTML中的setCapture和releaseCapture

    setCapture函数的作用就是将后续的mouse事件都发送给这个对象,releaseCapture就是将鼠标事件还回去,由 document、window、object之类的自行来处理,这样就保证了在拖动的过程中,不会由于经过了其它的元素而受到干扰。另外,还有一个很重 要的事情是,在Win32上,mouse move的事件不是一个连续的,也就是说,并不是我们每次移动1px的鼠标指针,就会发生一个mousemove,windows会周期性检查mouse 的位置变化来产生mousemove的事件。所以,如果是一个很小的页面对象,比如一个直径5px的圆点,如果没有setCapture和 releaseCapture,那么在鼠标按住之后,快速的移动鼠标,就有可能鼠标移动走了,但是小圆点还在原地,就是因为下一次的mousemove事 件已经不再发给这个圆点对象了。

    web开发和windows开发最大的区别就是windows开发是有状态的,而web开发是无状态的,在windows中,一切操作都可以由程序来控制 ,除非强制执行ctrl+alt+del;但web操作就不一样了,即使执行很重要的操作,用户一点击浏览器关闭按钮,就将前面操作成果化为乌有.尽管可以在onunload事件中加些代码,让用户可以选择是否退出,但不能从根本上解决问题!
            前几天,从网上看到setCapture方法,了解了一下,大体是这样的意思,当在IE文档某个区域中使用了这个方法,并且写了onclick或者 onmouse***等有关的鼠标事件方法,那么它就会监视相应的鼠标操作,即使你的鼠标移出了IE,它也一样能捕获到.如果你在某div中的 onclick事件中写了一个alert命令,这时,你点击的关闭按钮,它也一样会弹出alert窗口.releaseCapture与 setCapture方法相反,释放鼠标监控.
            利用这个特性,我们可以延缓IE的关闭窗口等破坏性操作,将一些重要的操作能够在破坏性操作执行之前得到处理.
            有一点遗憾:setCapture和releaseCapture 不支持键盘事件.只对onmousedown, onmouseup, onmousemove, onclick, ondblclick, onmouseover, onmouseout这样的鼠标事件起作用.
            下面是一个小例子,若我们要对divMain这个div元素里面的内容进行保护:
             1). 对divMain执行setCapture方法:
    document.getElementById("divMain").setCapture();
    2).加入一按钮btnChange,可以进行setCapture和releaseCapture切换,定义一全局变量;
    var isFreeze = true;
    3).在btnChange的onclick事件中,加入下列代码:
    function change_capture(obj)
    {
            isFreeze = !isFreeze;
        if(isFreeze)
        {
            obj.value = "releaseCapture";
            document.getElementById("divMain").setCapture();
        }
        else
        {
            obj.value = "setCapture";
            alert('保存!');                        //可以执行重要操作
            document.getElementById("divMain").releaseCapture();
        }
    }

    divMain的onclick事件中,加入下列代码:
    function click_func()
    {
        if(event.srcElement.id == "divMain")
        {
            alert("处理中...");                                                            //常规操作
            document.getElementById("divMain").setCapture();
        }
        else
        {
            if(isFreeze && event.srcElement.id != "btnChange")
            {
                alert('未执行releaseCapture,不能点击');
                document.getElementById("divMain").setCapture();
            }
        }
    }

    对ALT+F4进行处理,在body的onkeydown事件中加入下列代码:
    function keydown_func()
    {
        if (event.keyCode==115 && event.altKey)            //ALT+F4
        {
            if(isFreeze)
            {
                    alert('保存!');                                        //可以执行重要操作
                   }           
                //window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");           
            //return false;
            }
            document.getElementById("divMain").setCapture();
    }

    完整代码如下:
    <HTML>
        <head>
            <title>setCapture和releaseCapture的小应用</title>
            <SCRIPT LANGUAGE="JavaScript">
            <!--     
                var isFreeze = true;
               
                function click_func()
                {
                    if(event.srcElement.id == "divMain")
                    {
                        alert("处理中...");                                                            //常规操作
                        document.getElementById("divMain").setCapture();
                    }
                    else
                    {
                        if(isFreeze && event.srcElement.id != "btnChange")
                        {
                            alert('未执行releaseCapture,不能点击');
                            document.getElementById("divMain").setCapture();
                        }
                    }
                }
               
                function keydown_func()
                {
                   
                    if (event.keyCode==115 && event.altKey)            //ALT+F4
                    {
                        if(isFreeze)
                        {
                    alert('保存!');                                        //可以执行重要操作
                   }
               
                //window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
               
                        //return false;
            }
            document.getElementById("divMain").setCapture();
                }
               
                function change_capture(obj)
                {
                    isFreeze = !isFreeze;
                    if(isFreeze)
                    {
                        obj.value = "releaseCapture";
                        document.getElementById("divMain").setCapture();
                    }
                    else
                    {
                        obj.value = "setCapture";
                        alert('保存!');                                    //可以执行重要操作
                        document.getElementById("divMain").releaseCapture();
                    }
                }
            //-->
            </SCRIPT>
        </head>
        <BODY onkeydown="keydown_func();">
            <div id="divMain" style="width:500px;height:400px;border:1px solid #999;padding:2px" onclick="click_func();">
                点一下IE的菜单或者按钮看看:) 又或者IE窗口外的地方
                <input type="button" value="releaseCapture" onclick="change_capture(this);" id="btnChange">
                <script language="javascript">
                    document.getElementById("divMain").setCapture();
                </script>
            </div>
           
        </BODY>
    </HTML>

    关于javascript中call和apply函数的应用

    我们经常在javascipt中的面向对象应用中遇到call和apply函数;有时会被搞糊涂。其实它们可以改变函数或对象中的this保留字的值;this保留字的默认值就是这个类本身。举例说明:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <script language="javascript">
    test = {
    value : 'default',
    exec : function(){
       alert(this.value);
    }
    }
    function hhh(obj){
    test.exec();
    test.exec.apply(obj);
    }
    </script>
    </head>

    <body>
    <input type="button" onclick="hhh(this);" value="test"/>
    </body>
    </html>

    运行以上的页面就很快明白了.

    call和apply函数可以处理匿名函数

    关于类的初始化应用如下:

    Person = function(){
    this.Init.apply(this, arguments);
    };
    Person.prototype = {
    first : null,
    last : null,
    Init : function(first, last){
        this.first = first;
        this.last = last;
    },
    fullName : function(){
        return this.first + ' ' + this.last;
    },
    fullNameReversed : function(){
        return this.last + ', ' + this.first;  
    }
    };

    var s = new Person2('creese', 'yang');
    alert(s.fullName());
    alert(s.fullNameReversed());

    call和apply函数可以赋值函数内容(带匿名参数;但不触发)

    关于函数绑定事件应用如下:

    Function.prototype.BindForEvent = function() {
    var __m = this, object = arguments[0], args = new Array();
    for(var i = 1; i < arguments.length; i++){
       args.push(arguments[i]);
    }
    return function(event) {
        return __m.apply(object, [( event || window.event)].concat(args));
    }
    }

    call和apply函数关于函数绑定参数应用如下:

    Function.prototype.Bind = function() {
    var __m = this, object = arguments[0], args = new Array();
    for(var i = 1; i < arguments.length; i++){
       args.push(arguments[i]);
    }
    return function() {
        return __m.apply(object, args);
    }
    }

    call和apply函数功能是一样的;就是参数格式不同;fun.call(obj, arguments);apply的arguments是数组形式;call则是单数形式。


西工大noj100题python2024第三季21-30 【代码】西工大noj100题python2024第三季21-30。 阅读详情

相关推荐

Cocos Creator3.5.2使用Spine切换皮肤

3、然后获取当前spine中是否有皮肤数据,如果spine连皮肤数据都没有,接着写可能会error,这里的 skins[skin],是判断皮肤列表中是否有需要更换的皮肤。2、因为spine往往意味着异步加载,换肤时也经常出现频繁异步的情况,所以下一步我们要可以判断当前spine组件里是否已经加载好了spine文件。换肤前隐藏好需要换肤的节点,避免穿帮;官网文档的换肤流程太简化,对于实际使用来说会有各种各样的问题。1、首先获取对应的spine组件。这里的skin自然是外部传入的需要换肤的皮肤名。

tc654321的博客 1820

微信小程序新增拖动组件:movable-view

小程序在520节日前夜,让程序员们又躁动了一把,更新了一些很诱人的功能,如内容转发API,iBeacon API,振动API,屏幕亮度调节API等,也增强了地图组件的功能

APPx应用魔方 2万+

224G PAM-4 通道的 PCB 和封装设计

该行业正在努力实现层厚非常低的 sub-Dk = 3 材料,以及更先进的加工,这将使封装和 PCB 中的透射电镜截止值更高。当回波损耗占主导地位时,我们基本上需要去除沿互连产生阻抗失配的任何元件,就像上面描述的更光滑的铜和更低的 Dk 值一样。第二个影响是传输线阻抗匹配在 56 GHz 范围内的非常高的频率下非常困难的主要原因之一,另一个因素是 Tx 或 Rx 封装/缓冲器中的寄生效应。由于 PCB 和封装中的长度刻度,这是 BGA 上的焊盘、过孔和球等小结构开始在输入阻抗中产生明显偏差的频率范围。

jkh920184196的博客 842

微信小程序之---模版组件拖拽开发尝试

搜索了下小程序模版,找到了一个极速应用模版,专门开发小程序的,可以看到很多类型的模版,有复杂样式,常见组件,功能特点如下: 1.丰富的组件及模版可以拖拽组件,单独对组件元素设置各种属性而不需要一句代码 2.可以打包成微信开发工具源码可随时发布,随时扫描 3.包含完整详细的后台操作界面,数据管理,用户管理等 4.教程及社区问题讨论较为完善 但是。。。 看着很美好。。 其实我只想

吹泡泡的星星 7080

DDR内存接口深度解析:从寻址机制到FPGA时序约束实战

在高速数字系统设计中,内存接口是决定系统性能与稳定性的关键。DDR(双倍数据速率)技术通过在时钟的上升沿和下降沿传输数据,实现了带宽的倍增,广泛应用于消费电子、通信设备和工控主板等领域。其核心原理在于利用三维存储阵列(Bank、Row、Column)的分级寻址机制,通过先进行行激活、再进行列访问的固定时序,实现高速数据吞吐。理解这一寻址顺序是进行精准时序分析的基础。在工程实践中,FPGA作为内存控制器,需通过严谨的时序约束(如set_input_delay)来确保信号在高速传输下的建立与保持时间要求,从而将

weixin_29192211的博客 197

基于STM32的红外测温系统设计

为了实现本次的毕业设计,我搜集了大量的文献与资料,通过这些资料了解到红外测温的优点,与实现所需的基本器件,并设计了几个方案,最终选择了STM32作为主控芯片,为此还查阅了关于STM32的资料,在此次设计中采用的是MLX90614医用红外测温模块,通过查阅其数据手册了解其测量精度高且自带温度补偿,所以选择了该传感器作为红外测温模块,本次设计到此已经基本完成,硬件部分和软件部分的设计已基本完成。

weixin_112233的博客 1422

基于jquery的页面元素拖拽组件

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

软通大学企业博客 1116

Stata实战入门:从数据导入到基础分析的全流程指南

本文提供了Stata实战入门的全流程指南,从数据导入、清洗到基础分析和可视化,帮助初学者快速掌握Stata的核心功能。通过详细的步骤和实用技巧,读者可以高效完成数据处理、变量操作、描述性统计和回归分析等任务,提升数据分析效率。

weixin_28327051的博客 384

selenium实现浏览器截屏,拖拽页面元素

1.实现浏览器截屏//调用getscreenshotAs方法把当前浏览器打开的页面进行截图,保存到file对象中 File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); try { //把file对象转换为一个保存在c潘霞testing目录中名字为test.png的图片文件 //目标文

qiaotong1的专栏 2973

水文模型新手必看:用SWAT-CUP做参数率定,如何正确设置预热期、率定期和验证期?(附数据准备避坑指南)

本文详细介绍了使用SWAT-CUP进行水文模型参数率定的完整流程,重点解析了预热期、率定期和验证期的正确设置方法,并提供了数据准备的避坑指南。通过实操步骤和常见问题解决方案,帮助新手快速掌握SWAT-CUP参数率定的核心技巧,提升水文模型模拟精度。

weixin_26875109的博客 375

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

JavaScript经典案例:页面元素拖拽

效果展示: CSS代码: <style type="text/css"> #rect { position: absolute; width: 100px; height: 100px; line-height: 100px; text-align: center; background-color: plum; } #circle { position: absolute; width: 100px; height: 100px; line-h

WanAkiko. 211

File Load Error for Untitled.ipynb Unhandled error 解决方案

本文主要介绍了File Load Error for Untitled.ipynb Unhandled error 解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

基于grid布局实现页面元素的动态拖拽替换

本人看见网上的都是基于flex布局的动态拖拽,就想尝试写一下grid布局的拖拽实现一下,于是有了本篇文章,本篇主要都是基于元素实现,文章主要时提供了一个思路,需要时请根据自己的实际需求更改或者封装。觉得不错记得点个赞:

qq_40482342的博客 1096

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

拖动获取元素_如何实现页面元素的拖拽——JavaScript拖拽插件SortableJS

介绍演示地址: https://sortablejs.github.io/Sortable/Github:https://github.com/SortableJS/SortableSortableJS是一款用于在现代浏览器和触摸设备上的拖拽插件,不需要jQuery,但支持jQuery,支持Meteor,AngularJS,React,Polymer,Vue,Knockout和任何CSS库,例如B...

weixin_35400275的博客 762

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Vue拖拽组件实战指南:从零构建可自由布局的页面元素

还在为页面元素布局固定而烦恼吗?想要让用户能够自由拖动和调整页面上的组件大小?vue-draggable-resizable正是你需要的解决方案。这个专为Vue.js设计的组件,让实现拖拽调整功能变得像搭积木一样简单。想象一下,你的用户可以在页面上随心所欲地移动和调整各个模块,创造出完全个性化的界面布局,这种交互体验是不是很酷? ## 为什么你的项目需要拖拽调整功能? 在现代Web应用中,用户

gitblog_00263的博客 957

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

selenium--拖拽页面元素

from selenium import webdriver import unittest from selenium.webdriver import ActionChains import time class Test_dragpage(unittest.TestCase): def test_dragpageElement(self): ...

weixin_30312557的博客 307

利用JS实现页面元素拖拽

利用JS实现卡片拖拽 需求分析: 拖拽的流程: 当鼠标在被拖拽元素上按下时,开始拖拽(onmousedown) 当鼠标移动时被拖拽的元素跟随鼠标移动 ????️(onmousemove) 当鼠标松开时,被拖拽的元素固定在当前位置(onmouseup) 前置知识: 「1」通过JS修改或读取元素的CSS样式 「2」什么是事件对象?什么是事件冒泡?如何阻止事件冒泡?中的什么是事件对象。 编码详情: 一、创建一个盒子,????值为“box1” 二、编写JS代码 为什么需要计算盒子的偏移量呢❓ 是因为倘若我

ChuanyangChen的博客 2727

java【selenium】拖拽页面元素

import static org.junit.jupiter.api.Assertions.*; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api....

weixin_39048389的博客 847

js实现页面元素的拖拽

平时在我们页面上,经常会悬浮着一些功能按钮,如帮助,联系客服等,按钮的显示比较简单,用定位悬浮在自己需要的位置上就行,比如下面的页面上我们展示一个帮助的按钮,用户点击后可以展示一些帮助的信息: 代码: 但是这样定位一般是固定在这个位置,如果这时候刚好【帮助按钮】挡住了这个位置原本有的其他操作按钮,那么我们就需要能够把【帮助按钮】拖开,不影响原本页面上的操作。一般实现拖动的思路是:在【帮助按钮】上鼠标按下时,记录下当前的坐标,以及原本相对于父元素的位置,然后监听【帮助按钮】的鼠标移动事件【onmousem

zongmaomx的博客 3334

vue中使用zrender实现页面元素拖拽

业务描述 这也算是一个比较经典的页面交互,长按鼠标,可以将页面上的一些dom元素拖拽到指定区域,生成指定图形 所用到的技术就是h5的draggable属性和canvas画布,而本文所用的zrender,是一个对canvas的常见操作进行了简单封装的库(ps:著名的echarts.js底层就是又基于zrender构建的 准备工作 npm install zrender -S 代码 话不多说,直接上代码,一些坑我也会在后面指出 zrender可直接在组件中引入 // vue template层代码 <

weixin_41320468的博客 3584

前端JS拖拽页面元素

前端JS拖拽组件 代码如下: function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { //alert(ev.target.parentNode.previousElementSibling.id); ev.dataTransfer.setData("Text",e...

aihuage9988的博客 516

直播平台制作,WebDriver API 拖拽页面元素

以上就是直播平台制作,WebDriver API 拖拽页面元素, 更多内容欢迎关注之后的文章。直播平台制作,WebDriver API 拖拽页面元素。

云豹网络科技 242

前端实现页面元素拖拽

要实现拖拽的效果,有两种实现方式:     插件:Resizable | jQuery UI或者jquery-resizable-columns     原生:文章-怎么用 javascript 实现拖拽              mousedown:记录鼠标当前坐标mousemove:对比当前坐标与mousedown的坐标div宽 width : div.height +

Alfred的博客 4687

利用PyUserInput页面元素实现拖拽

实际脚本编写中遇到,利用selenium2Library中drag and drop 和 by offset方法都不能实现拖拽的时候。多次尝试后,改用PyUserInput中的Pymouse,但是其中drag方法仍然不能实现拖拽,脑细胞死一片后,发现pymouse的drag方法中用了press和release方法,但并不能确定哪个方法导致的拖拽失效。后来换了种思路如下成功实现拖拽: #-*-c...

backhtchero的博客 1158

实现页面元素的拖拽(jqueryui实现)

之前实现元素的拖拽很多都是通过js手写的,后来发现使用jqueryui实现,简单特别多,而且能完成很多附加功能。 首先是最基本的用法。$(" ").draggable()就能实现指定元素的拖拽 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

weixin_30399055的博客 629
上一篇: js实现模拟桌面窗口系统
下一篇: JavaScript事件冒泡简介及应用
zxycode007
博客等级 码龄18年 53粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值