关于HTML之拖动

在HTML中,拖动比较麻烦需要不断的运算拖动的距离,还有有很多的代码,今天就来演示拖动的效果与代码的实现,好了废话不多说,上一个相互都可以投放与拖动的代码:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        article{
            margin:200px auto;
            width: 400px;
            height: 60px;
            border: 1px solid red;
        }
        div{

            width: 100px;
            height: 40px;
            margin: 10px auto;
            margin-left: 65px;
            border: 1px solid darkgray;
            float: left;

        }
        div img{
            margin: 5px 6px ;

        }
    </style>
</head>
<body>
<article>
   <div id="dropBlock"><img  id="img" src="w3school_logo_black.gif"></div>
   <div id="moveBlock"></div>
</article>
</body>
<script>
    (function(){
       var img=document.getElementById("img")
       var divs=document.getElementsByTagName("div")
        for(var i=0;i<divs.length;i++){
           divs[i].ondragover=function(e){
               e.preventDefault();
           }
            divs[i].ondrop=function(e){
                this.appendChild(img);
            }

        }
    })();

    //封装document.getElementById();

    function $() {
        var elements = new Array();

        for (var i = arguments.length - 1; i >= 0; i--) {
            var element = arguments[i];

            if (typeof element == "string") {
                element = document.getElementById(element);
            }

            if (arguments.length == 1) {
                return element;
            } else {
                elements.push(element);
            }

            return elements;
        };
    };

    //封装事件处理
    function addEvent(node, type, listener) {
        if (!(node = $(node))) return false;
        if (node.addEventListener) {
            //W3C
            node.addEventListener(type, listener, false);
            return true;
        } else if (node.attachEvent) {
            node[‘e‘ + type + listener] = listener;
            node[type + listener] = function() {
                node[‘e‘ + type + listener](window.event);
            };
            node.attachEvent(‘on‘ + type, node[type + listener]);
            return true;
        }

        return false;

    };

    //移出事件
    function removeEvent(node,type,listener){
        if (!(node = $(node))) return false;
        if(node.removeEventListener){
            node.removeEventListener(type,listener,false);
            return true;
        }else if(node.removeEvent){
            node.detachEvent(‘on‘+type,node[type+listener]);
            node[type+listener] = null;
            return true;
        }
        return false;
    };
    //获取事件对象
    function getEventObject(e){
        return e || window.event;

    }
    //阻止事件冒泡
    function stopPropagation(eventObject){
        var eventObject = eventObject || getEventObject();
        if(eventObject.stopPropagation){
            eventObject.stopPropagation();
        }else{
            eventObject.cancelBubble = true;
        }
    };
    //阻止浏览器默认 事件
    function stopDefault(eventObject){
        var eventObject = eventObject || getEventObject();
        if(eventObject.preventDefault){
            eventObject.preventDefault();
        }else{
            eventObject.returnValue = false;
        }
    };
    //获取鼠标点击时的x和y坐标
    function getPointerPositionInDocument(eventObject) {
        eventObject = eventObject || getEventObject(eventObject);
        var x = eventObject.pageX || (eventObject.clientX +
                (document.documentElement.scrollLeft || document.body.scrollLeft));
        var y = eventObject.pageY || (eventObject.clientY +
                (document.documentElement.scrollTop || document.body.scrollTop));
        return {
            ‘x‘: x,
            ‘y‘: y
        };
    };

    //获取文档的宽和高
    function getWindowSize(){
        var width = height = 0;
        if(this.innerWidth){
            width = this.innerWidth;
            height = this.innerHeight;
        }else if(document.documentElement && document.documentElement.clientHeight){
            width = document.documentElement.clientWidth;
            height = document.documentElement.clientHeight;
        }else if(document.body && document.body.clientHeight){
            width = document.body.clientWidth;
            height = document.body.clientHeight;
        }

        return {‘width‘:width,‘height‘:height};
    };

    //获取标签的宽、高和left、top
    function getDimensions(element){
        if (!(element = $(element))) return false;

        return {
            ‘left‘:element.offsetLeft,
            ‘top‘:element.offsetTop,
            ‘width‘:element.offsetWidth,
            ‘height‘:element.offsetHeight
        };
    }

    //设置标签样式
    function setStyle(element, styles) {
        if (!(element = $(element))) return false;
        for (property in styles) {
            if (!styles.hasOwnProperty(property)) continue;

            if (element.style.setProperty) {
                element.style.setProperty(
                        uncamelize(property, ‘-‘), styles[property], null);
            } else {
                element.style[camelize(property)] = styles[property];
            }
        }
        return true;
    };
    //将-形式的字符串转换为驼峰命名法的字符串
    function camelize(s) {
        return s.replace(/-(\w)/g, function(strMatch, p1) {
            return p1.toUpperCase();
        });
    };
    //将驼峰命名法的字符串转换为-形式的字符串
    function uncamelize(s, sep) {
        sep = sep || ‘-‘;
        return s.replace(/([a-z])([A-Z])/g, function(strMatch, p1, p2) {
            return p1 + sep + p2.toLowerCase();
        });
    };

</script>
</html>

在这当中要理解其中拖动的步骤,在拖动时步骤一个是七个,它可以分为七个事件,分别是:开始拖动,拖动中,拖动结束,进入投放区,投放区移动,投放,离开投放区,这个七个步骤不要乱找好位置,同时是一步执行,同时还有一个很重要的一个因数——阻止默认事件,在浏览器中有默认事件,这个有好有坏,看个人理解。

时间: 2024-08-03 09:44:01

关于HTML之拖动的相关文章

*C#(WPF)--矩阵拖动和矩阵动画(拖动展开,不足动画效果)

最近在研发新的项目,遇到了一个桌面模式下的难点--展开动画.之前动画这方面没做过,也许很多人开始做的时候也会遇到相关问题,因此我把几个重点及实际效果图总结展示出来: 我的开发环境是在VS2017下进行的,这个工具条主要功能是:一个工具条,可进行拖拉.可进行拖拉展开,可在拖动之后不足展开并反向继续展开剩下的部分: 一.[拖动]   拖动的核心代码是通过矩阵进行定位和拖动的,定位是以父容器为模板的.以下是核心代码(及效果图): 1 /// <summary> 2 /// 这里TitleBar代指最

可拖动GridView的实现,类似支付宝界面

1.概述 之前实现过一个仿支付宝界面的代码,可拖动网格视图.其实实现的原理网上都可以找到,我也是参考网上实现的方法,实现了自己需要的界面.并对实现的原理和方法进行了分析,现在进行总结,放太久都快忘记自己做过这回事了.原理和实现网上大部分地方都可以找到,我是根据自己的理解进行分析的,现在对之前的工作进行总结,了解实现的基本过程和方法.GridView拖动的源码来源于网上,根据需求修改成了需要的效果,下面简单说明下实现过程. 在说明实现之前,先上一张总体的界面效果图: 为了更好说明程序种各个变量的意

在Canvas上拖动产生文字

拖动的幅度越大,字就会越大. <!DOCTYPE html> <html> <head lang="en"> <style> html, body { width: 100%; height: 100%; margin: 0px; overflow: hidden; } canvas { cursor: crosshair; } span { font-family: 'Georgia', cursive; font-size: 40px

Unity3D拖动任意对象GameObject移动到任意地方

今天不是很忙,研究了一下拖拽GameObject移动到任意位置,沿x轴和z轴移动,其他的也就不说了,上代码: using UnityEngine; using System.Collections; public class DragAndDrog : MonoBehaviour {     private GameObject target;     private bool isMouseDrag;     private Vector3 screenPosition;     privat

CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源      [[email protected] ~]# wget -c http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm      [[email protected] ~]# rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt      [[email 

Winform 图片鼠标滚动查看(放大,缩小,旋转,拖动查看)[日常随笔]

方法千千万,我只是其中一笔[通过控制PictureBox来控制图片,图片完全施展在控件中]...几久不做,还真有点陌生! 窗体构造中添加鼠标滚动: 1 /// <summary> 2 /// 窗体构造方法 3 /// </summary> 4 public CandidateForm() 5 { 6 InitializeComponent(); 7 this.MouseWheel += new MouseEventHandler(CandidateForm_MouseWheel);

JavaScript中Textarea滚动条不能拖动的问题

在IE中,你是否碰到过Textarea的滚动条不能拖动,但点上下按钮可以滚动内容? 这个问题的原因很可能就是在该Textarea中绑定了onfocus事件,但是,基于某种条件,又将其焦点去掉(即blur()),这样就导致滚动条不能拖动. 一个典型的例子为: me.$input.on("focus",function(){ if ($isIE && me.enabled == false) me.$input.blur(); }); 当输入控件$input(DOM 元素我

js实现可拖动Div

js实现可拖动Div 随着时代的变化,越来越感觉到js的重要性,js不仅可以做web页面(如Ext框架),还可以做一些web的特效,这些特效不仅兼容PC,而且兼容手机端,毕竟是基于浏览器的,和平台没关系.现在微软的windows8 系统的App都可以用js开发了,大家有时间可以去尝试一下. 现在切入正题,说一下js 实现可拖动Div.实现这个功能我们先说一下思路: 1.捕捉鼠标div的mousedown事件 2.捕捉 document的   mousemove事件 3.取消事件 然后我们看一下代

防止微信浏览器被整体拖动的方法

在微信网页开发中,我使用的页面结构是在body下的container覆盖全屏,container下有个header和page的容器,page负责显示所有内容并实现滚动. 结构如图: 但是遇到了一个问题:在页面已经滚动到顶部时,继续往下拖动page容器,会将微信浏览器整体往下拖,漏出"该网页由XXX提供"的提示,然后在安卓下,影响并不大,但是在iphone下,就没那么简单了,经过测试,在苹果下,往下拖动后快速滑动页面中的page,page并不会滚动,上拖同样遇到了这个问题,非常影响体验.

鼠标拖动改变DIV等网页元素的大小的最佳实践

1.初次实现 1.1 html代码 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>div change