文档章节

JavaScript实现鼠标拖拽效果

luke0202
 luke0202
发布于 2015/11/24 15:30
字数 786
阅读 52
收藏 0

精选30+云产品,助力企业轻松上云!>>>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<html>
<head>
    <title> 弹出层 </title>
    <style type="text/css">
        #container div {
            margin-top: 6px;
        }
        #select_city h3 {
            float: left;
        }
        #main_city, #all_province {
            clear: both;
        }
        #main_city div, #all_province div {
            width: 588px;
            clear: left;
        }
        #main_city h4, #all_province h4 {
            float: left;
            display: inline;
            font-size: 16px;
        }
        #main_city div span, #all_province div span {
            margin: 0 9px;
            cursor: pointer;
            font-size: 14px;
        }
        #float_lay {
            width: 220px;
            height: 122px;
            border: 1px #787878 solid;
            position: absolute;
            background: #fff;
            z-index: 999;
            display: none;
        }
    </style>
    <script type="text/javascript">
        //弹出层
        function openLayer(objId, conId) {
            var arrayPageSize = getPageSize();//调用getPageSize()函数
            var arrayPageScroll = getPageScroll();//调用getPageScroll()函数
            if (!document.getElementById("popupAddr")) {
                //创建弹出内容层
                var popupDiv = document.createElement("div");
                //给这个元素设置属性与样式
                popupDiv.setAttribute("id", "popupAddr")
                popupDiv.style.position = "absolute";
                popupDiv.style.border = "1px solid #ccc";
                popupDiv.style.background = "#fff";
                popupDiv.style.zIndex = 99;
                //创建弹出背景层
                var bodyBack = document.createElement("div");
                bodyBack.setAttribute("id", "bodybg")
                bodyBack.style.position = "absolute";
                bodyBack.style.width = "100%";
                bodyBack.style.height = document.documentElement.scrollHeight + "px";
                bodyBack.style.zIndex = 98;
                bodyBack.style.top = 0;
                bodyBack.style.left = 0;
                bodyBack.style.filter = "alpha(opacity=50)";
                bodyBack.style.opacity = 0.5;
                bodyBack.style.background = "#ddf";
                //实现弹出(插入到目标元素之后)
                var mybody = document.getElementById(objId);
                insertAfter(popupDiv, mybody);//执行函数insertAfter()
                insertAfter(bodyBack, mybody);//执行函数insertAfter()
            }
            //显示背景层
            document.getElementById("bodybg").style.display = "";
            //显示内容层
            var popObj = document.getElementById("popupAddr")
            popObj.innerHTML = document.getElementById(conId).innerHTML;
            popObj.style.display = "";
            //让弹出层在页面中垂直左右居中(统一)
            // popObj.style.width  = "600px";
            // popObj.style.height = "400px";
            // popObj.style.top  = arrayPageScroll[1] + (arrayPageSize[3] - 35 - 400) / 2 + 'px';
            // popObj.style.left = (arrayPageSize[0] - 20 - 600) / 2 + 'px';
            //让弹出层在页面中垂直左右居中(个性)
            var arrayConSize = getConSize(conId);
            popObj.style.top = arrayPageScroll[1] + (arrayPageSize[3] - arrayConSize[1]) / 2 - 50 + 'px';
            popObj.style.left = (arrayPageSize[0] - arrayConSize[0]) / 2 - 30 + 'px';
        }
        //获取内容层内容原始尺寸
        function getConSize(conId) {
            var conObj = document.getElementById(conId)
            conObj.style.position = "absolute";
            conObj.style.left = -1000 + "px";
            conObj.style.display = "";
            var arrayConSize = [conObj.offsetWidth, conObj.offsetHeight]
            conObj.style.display = "none";
            return arrayConSize;
        }
        function insertAfter(newElement, targetElement) {//插入
            var parent = targetElement.parentNode;
            if (parent.lastChild == targetElement) {
                parent.appendChild(newElement);
            } else {
                parent.insertBefore(newElement, targetElement.nextSibling);
            }
        }
        //获取滚动条的高度
        function getPageScroll() {
            var yScroll;
            if (self.pageYOffset) {
                yScroll = self.pageYOffset;
            } else if (document.documentElement && document.documentElement.scrollTop) {
                yScroll = document.documentElement.scrollTop;
            } else if (document.body) {
                yScroll = document.body.scrollTop;
            }
            arrayPageScroll = new Array('', yScroll)
            return arrayPageScroll;
        }
        //获取页面实际大小
        function getPageSize() {
            var xScroll, yScroll;
            if (window.innerHeight && window.scrollMaxY) {
                xScroll = document.body.scrollWidth;
                yScroll = window.innerHeight + window.scrollMaxY;
            } else if (document.body.scrollHeight > document.body.offsetHeight) {
                sScroll = document.body.scrollWidth;
                yScroll = document.body.scrollHeight;
            } else {
                xScroll = document.body.offsetWidth;
                yScroll = document.body.offsetHeight;
            }
            var windowWidth, windowHeight;
            if (self.innerHeight) {
                windowWidth = self.innerWidth;
                windowHeight = self.innerHeight;
            } else if (document.documentElement && document.documentElement.clientHeight) {
                windowWidth = document.documentElement.clientWidth;
                windowHeight = document.documentElement.clientHeight;
            } else if (document.body) {
                windowWidth = document.body.clientWidth;
                windowHeight = document.body.clientHeight;
            }
            var pageWidth, pageHeight
            if (yScroll < windowHeight) {
                pageHeight = windowHeight;
            } else {
                pageHeight = yScroll;
            }
            if (xScroll < windowWidth) {
                pageWidth = windowWidth;
            } else {
                pageWidth = xScroll;
            }
            arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight)
            return arrayPageSize;
        }
        //关闭弹出层
        function closeLayer() {
            document.getElementById("popupAddr").style.display = "none";
            document.getElementById("bodybg").style.display = "none";
            return false;
        }
    </script>
    <script type="text/javascript">
        //对“拖动点”定义:onMousedown="StartDrag(this)" onMouseup="StopDrag(this)" onMousemove="Drag(this)"即可
        var move = false, oldcolor, _X, _Y;
        function StartDrag(obj) {  //定义准备拖拽的函数
            obj.setCapture(); //对当前对象的鼠标动作进行跟踪
            oldcolor = obj.style.backgroundColor;
            obj.style.background = "#999";
            obj.style.cursor = "move";
            move = true;
            //获取鼠标相对内容层坐标
            var parentwin = document.getElementById("popupAddr");
            _X = parentwin.offsetLeft - event.clientX;
            _Y = parentwin.offsetTop - event.clientY;
        }
        function Drag(obj) { //定义拖拽函数
            if (move) {
                var parentwin = document.getElementById("popupAddr");
                parentwin.style.left = event.clientX + _X + "px";
                parentwin.style.top = event.clientY + _Y + "px";
            }
        }
        function StopDrag(obj) {   //定义停止拖拽函数
            obj.style.cursor = "default";
            obj.style.background = oldcolor;
            obj.releaseCapture(); //停止对当前对象的鼠标跟踪
            move = false;
        }
    </script>
</head>
<body>
<input name="Input" id="openBtn" value="可拖动层" type="button" onclick="openLayer('openBtn','contentContainer')"/>
<div id="contentContainer" style="display:none">
    <div id="tab3" style="width:360px;height:200px;background:#fee;">
        <div id="tabtop3">
            <div id="tabtop-L3" style="cursor:default;background:#DBDEDE" onMousedown="StartDrag(this);"
                 onMouseup="StopDrag(this);" onMousemove="Drag(this);">
                <center><strong style="color:red;font-size:20px">填写内容</strong></center>
            </div>
        </div>
        <div id="tabcontent3" style="padding:8px">
            <center><br/><br/>
                内容:<textarea name='_content' id='_content' cols='20' rows='10'
                             style='width:200px;height:70px;border:1px solid #CDCDCD;color:blue;'
                             onpropertychange='if(this.value.length>100){this.value=this.value.slice(0,100)}'></textarea>
            </center>
        </div>
        <div id="tabtop-R" style="bottom:5px;">
            <center><input type="button" value="确定" onclick="alert(document.getElementById('_content').value);"/>
                <input type="button" value="取消" onclick="closeLayer();"/></center>
        </div>
    </div>
</div>
</body>
</html>

luke0202
粉丝 13
博文 111
码字总数 49297
作品 0
石家庄
程序员
私信 提问
加载中
请先登录后再评论。
前端工程师小A学习JS的旅程

在网页里,拖拽效果是很常见的形式,实现起来也比较简单,但是这么简单的代码,却能体现出很多前端开发工程湿的JS能力,我们来看看小A工程师的实现路程: HTML代码: <!DOCTYPE HTML> <html>...

fengyuqing
2013/06/04
29
0
JavaScript拖拽效果的原理及实现

JavaScript拖拽效果的原理及实现 JavaScript中实现拖拽效果需要用到事件侦听和鼠标事件。事件侦听是对被拖拽的元素添加事件侦听,包括mousedown,mousemove,mouseup。 常见的拖拽操作基本就是...

Sunny向天
04/06
0
0
鼠标等操作事件相关资料

js原生拖拽的两种方法 js拖动改变div大小 jquery 移动端手指拖拽div四个边框,可上下左右随意拉伸调节div大小 js动态创建input Javascript实现鼠标框选元素后拖拽被框选的元素 使用CSS3绘制网...

IT追寻者
04/16
8
0
Javascript从零开始学习第四天(1)

Javascript从零开始学习第一天 Javascript从零开始学习第二天(1) Javascript从零开始学习第二天(2) Javascript从零开始学习第三天(1) Javascript从零开始学习第三天(2) Javascript从零开始学...

山东-小木
2014/12/27
68
0
彻底搞懂拖拽——基于鼠标事件的拖拽以及基于HTML5 API的拖拽完整实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caomage/article/details/83622628 一、基于鼠标事件的拖拽 原理——onmousedown、onmousemove、onmouseup o...

caomage
2018/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

在Python中从字符串转换为布尔值? - Converting from a string to boolean in Python?

问题: Does anyone know how to do convert from a string to a boolean in Python? 有谁知道如何在Python中从字符串转换为布尔值? I found this link . 我找到了此链接 。 But it doesn't......

javail
今天
19
0
中国饭店协会数据表明

记者了解到,中国饭店协会数据表明,2018年全国餐饮收入42716亿元,同比增长9.5%.根据国家统计局数据显示,截至2017年底,限额以上餐饮行业的从业人数达到2232万人,巨大的餐饮市场背后,餐饮行业的...

asd369
今天
35
0
OSChina 周六乱弹 —— 日本的丧尸光天化日之下都开始……

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《風の手枕》- 増田俊郎 手机党少年们想听歌,请使劲儿戳(这里) @码界农民工 :...

小小编辑
今天
49
0
Hacker News 简讯 2020-07-11

更新时间: 2020-07-11 03:01 The TikTok app is no longer permitted on mobile devices that access Amazon email - (twitter.com) TikTok应用程序不再允许在访问亚马逊电子邮件的移动设备上......

FalconChen
今天
161
0
是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部