JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例


Posted in Javascript onMarch 04, 2015

本文实例讲述了JS实现可缩放、拖动、关闭和最小化的浮动窗口方法。分享给大家供大家参考。具体实现方法如下:

<!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=utf-8" />

<title>JS实现可缩放、拖动、关闭和最小化的浮动窗口</title>

</head>

<style type="text/css">

 .divWindow{word-wrap:break-word;position:absolute; overflow:hidden;}

 .divBar{border:#000000 1px solid;position:absolute;border-bottom:#000000 1px solid;width:100%;height:20px;background-color:#0099FF;cursor:hand;line-height:20px;}

 .divChange{position:absolute;right:25px;font-size:10pt;}

 .divClose{position:absolute;right:5px;font-size:11pt;}

 .divTitle{position:absolute;left:5px;font-size:10pt;white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow: hidden;}

 .divContent{border:#000000 1px solid;border-top:#000000 0px solid;position:absolute; top:20px;width:100%; background-color:#FFFFFF; overflow-y:auto;

    SCROLLBAR-BASE-COLOR: #FFFFFF;SCROLLBAR-ARROW-COLOR: #999999;SCROLLBAR-FACE-COLOR: #EEEEEE;SCROLLBAR-HIGHLIGHT-COLOR: #EEEEEE;

    SCROLLBAR-SHADOW-COLOR: #EEEEEE;SCROLLBAR-3DLIGHT-COLOR: #FFFFFF;SCROLLBAR-TRACK-COLOR: #FFFFFF;SCROLLBAR-DARKSHADOW-COLOR: #CCCCCC;}

 .divReSize{height:7px; width:7px; overflow:hidden; background-color:#0000FF; position:absolute; bottom:6px; right:6px; cursor:nw-resize}

 .divIframe{height:100%;width:100%;}

</style>

<script language="javascript">

var zindex=0  //全局变量

function dragClass(name,title,content,left,top,width,height){

var isMouseDown=false;

var maximum=false;

var offX=0;   //设置抓取点X坐标

var offY=0;   //设置抓取点Y坐标

var oldLeft;  //保存正常状态的X坐标

var oldTop;   //保存正常状态的Y坐标

this.mousedown= function (){    //按下拖动点

     Bar.setCapture(); //设置抓取

     offX=parseInt(event.clientX)-parseInt(Window.style.left);

     offY=parseInt(event.clientY)-parseInt(Window.style.top);

     isMouseDown=true;

 if(Window.style.zIndex<=zindex){

  zindex++;

  Window.style.zIndex=zindex;

 }

}

this.mousemove= function (){    //拖动窗口

     if (isMouseDown && !maximum){

  Bar.style.cursor='move'

  Window.style.left=event.clientX-offX;

  Window.style.top=event.clientY-offY;

  if(Window.style.zIndex<=zindex){

   zindex++;

   Window.style.zIndex=zindex;

  }

     }

}

this.mouseup=function (){     //松开按钮

     Bar.releaseCapture();     //取消抓取

     Bar.style.cursor='hand';

     if (parseInt(Window.style.top)<0){

     Window.style.top='0px';

     }

     if (parseInt(Window.style.left)<0){

     Window.style.left='0px';

     }

     isMouseDown=false;

}

this.dblclick=function (){    //双击最大最小化

     if (!maximum){

    oldLeft=Window.style.left;   //保存正常状态的X坐标

    oldTop=Window.style.top;    //保存正常状态的Y坐标

    Window.style.left='0px';

    Window.style.top='0px';

    Window.style.width= document.body.clientWidth;    //网页可见区域宽

    Title.style.width=(document.body.clientWidth-40)+'px';  //设置标题长度

    ReSize.style.display='none';

    if(Change.innerText=='-'){

      Window.style.height='100%';

      Content.style.height=document.body.clientHeight-20; //网页可见区域宽-标题高度

    }else{

      Window.style.height='20px';

    }

    maximum=true;

     }else{

    Window.style.left=oldLeft;

    Window.style.top=oldTop;

    Window.style.width=width+'px';

    Title.style.width=(width-40)+'px';

    ReSize.style.display='';

    if(Change.innerText=='-'){

      Window.style.height=height+'px';

      Content.style.height=parseInt(height-20)+'px';

    }else{

      Window.style.height='20px';

    }

    maximum=false;

     }

 if(Window.style.zIndex<=zindex){

  zindex++;

  Window.style.zIndex=zindex;

 }

}

this.changeWindow=function (){   //收缩窗口

     event.cancelBubble=true;

  if(Change.innerText=='-'){

    Window.style.height='20px';

    Change.innerText='□';

    Content.style.display='none';

    ReSize.style.display='none';

     }else{

    if (maximum){

      Window.style.height='100%';

      Content.style.display='';

      ReSize.style.display='';

      Content.style.height=document.body.clientHeight-20; //网页可见区域宽-标题高度

    }else{

      Window.style.height=height+'px';

      Content.style.display='';

      ReSize.style.display='';

      Content.style.height=parseInt(height-20)+'px';

    }

    Change.innerText='-';

     }

}
var Window=document.createElement("div");

 Window.id="divWindow"+ name;

 Window.className="divWindow";

 Window.style.left=left+'px';

 Window.style.top=top+'px';

 Window.style.width=width+'px';

 Window.style.height=height+'px';

 Window.onclick=function(){

  if(parseInt(Window.style.zIndex)<=zindex){

   zindex++;

   Window.style.zIndex=zindex;

  }

 }

this.Window=Window;

//公有属性,类外可操作;若要在类外操作,可将元素改为公有属性

 

var Bar=document.createElement("div");

 Bar.id="divBar"+name;

 Bar.onselectstart="return false";

 Bar.className="divBar";

 Bar.onmousedown=this.mousedown;

 Bar.ondblclick=this.dblclick;

 Bar.onmousemove=this.mousemove;

 Bar.onmouseup=this.mouseup;

 Window.appendChild(Bar);

var Title=document.createElement("span");

 Title.id="divTitle"+ name;

 Title.className="divTitle";

 Title.style.width=(width-40)+'px';    //自适应标题长度

 Title.innerText=title;

 Bar.appendChild(Title);

var Change=document.createElement("span");

 Change.id="divChange"+ name;

 Change.className="divChange";

 Change.innerText="-";

 Change.ondblclick=this.changeWindow;

 Change.onclick=this.changeWindow;

 Bar.appendChild(Change);

var Close=document.createElement("span");

 Close.id="divClose"+ name;

 Close.onclick=function(){

  Window.style.display='none';

 }

 Close.className="divClose";

 Close.innerText="×";

 Bar.appendChild(Close);

var Content=document.createElement("div");

 Content.id="divContent"+ name;

 Content.className="divContent"

 Content.innerHTML=content;

 Content.style.height=parseInt(height-20)+'px';

 Window.appendChild(Content);

 

var ReSize=document.createElement("div");

 ReSize.className="divReSize";

 ReSize.onmousedown=function(){

  if(Window.style.zIndex<=zindex){

   zindex++;

   Window.style.zIndex=zindex;

  }

  ReSize.setCapture();

  isMouseDown=true;

 }

 ReSize.onmousemove=function(){

   if (isMouseDown && !maximum)

   {

   width=parseInt(event.clientX)-parseInt(Window.style.left)+5;

   height=parseInt(event.clientY)-parseInt(Window.style.top)+5;

   if(width>100){       //设置最小宽度

    Window.style.width=width+'px';

    Title.style.width=(width-40)+'px';

   }

   if(height>100){       //设置最小高度

    Window.style.height=height+'px';

    Content.style.height=parseInt(height-20)+'px';

   }

   }

 }

 ReSize.onmouseup=function(){

  ReSize.releaseCapture();

  isMouseDown=false;

 }

 Window.appendChild(ReSize);

var Iframe=document.createElement("iframe"); //添加iframe,IE6.0下遮挡<select>控件

 Iframe.className="divIframe";

 Window.appendChild(Iframe);

 

 document.body.appendChild(Window);
}

</script>

<body>

<script>

//dragClass(ID,窗口标题,内容,X坐标,Y坐标,宽,长)

var c1="窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1窗口1";

objWin1=new dragClass('win1','拖动窗口1',c1,0,150,300,300);

var c2="窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2窗口2";

objWin2=new dragClass('win2','拖动窗口2',c2,350,150,300,300);

var objWin3;

function openWin(){

 if(objWin3==null){

  var c3="123窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3窗口3";

  objWin3=new dragClass('win3',c3,c3,700,150,300,300);

 }else{

    if(objWin3.Window.style.display=='none'){

   objWin3.Window.style.display='';

    }

 }

}

</script>

<input type="button" value="弹出【窗口3】" onClick="openWin()" />

</body>

</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
基于Jquery的将DropDownlist的选中值赋给label的实现代码
May 06 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
学习JavaScript设计模式之代理模式
Jan 12 Javascript
纯JS实现表单验证实例
Dec 24 Javascript
jQuery实现 上升、下降、删除、添加一行代码
Mar 06 Javascript
vue时间格式化实例代码
Jun 13 Javascript
详解vue中引入stylus及报错解决方法
Sep 22 Javascript
node.js中fs文件系统目录操作与文件信息操作
Feb 24 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
vue-cli 为项目设置别名的方法
Oct 15 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
Oct 22 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
May 15 Javascript
JavaScript常用脚本汇总(一)
Mar 04 #Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
Mar 04 #Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 #Javascript
JavaScript中的关联数组问题
Mar 04 #Javascript
JavaScript中常见获取元素的方法汇总
Mar 04 #Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 #Javascript
JavaScript设置获取和设置属性的方法
Mar 04 #Javascript
You might like
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
php 分页函数multi() discuz
2009/06/21 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
Python深入学习之闭包
2014/08/31 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
Python3读写ini配置文件的示例
2020/11/06 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
经典的班主任推荐信
2013/10/28 职场文书
员工培训心得体会
2013/12/30 职场文书
小学生安全责任书
2014/07/25 职场文书
大学生简短的自我评价
2014/09/12 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书