JavaScript简单实现弹出拖拽窗口(二)


Posted in Javascript onJune 17, 2016

接上文JavaScript简单实现弹出拖拽窗口(一)进行学习。 
下面开始具体分析代码部分:
 首先我们先确认下结构:
 悬浮窗口:初始不可见。包括标题栏和内容栏,标题栏内有标题和关闭按钮。
 遮罩层:初始不可见。用于设置弹出悬浮窗口时的半透明背景,
 按钮:用于点击弹出悬浮窗口。 

下面进行详细解释
 1、要让窗口能自由移动,那么窗口的定位(position)应该采用绝对定位(absolute);   

/*登录浮层组件*/
.popup{ 
 display:none;            /*初始隐藏*/
 width: 380px;
 height: auto;            /*高度自由,因为不确定,内容多少。*/
 border: 1px solid #D5D5D5;
 background: #fff;           /*窗口内容不透明,背景为白色*/ 
 box-shadow: 0 0 3px rgba(0, 0, 0, 0.25);
 -moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.25);
 -webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.25);    /*内容窗口带阴影*/
 border-radius: 8px;           /* 所有角都使用半径为8px的圆角,此属性为CSS3标准属性 */ 
 -moz-border-radius: 8px;         /* Mozilla浏览器的私有属性 */ 
 -webkit-border-radius:8px;         /* Webkit浏览器的私有属性 */ /*窗口圆角*/
 position: absolute;
 top: 100px;
 left: 100px;            /*绝对定位*/
 z-index: 9000; 
 }

2.给窗口添加标题栏,同时将标题栏的鼠标光标设置为拖动(move)形状(在chrome中拖动的时候,光标会变成文字光标,松开鼠标键后恢复),这里需要对标题栏的左上角和右上角设置一下圆角。 

/*标题栏区域*/
.popup_title{
 height: 48px;
 line-height: 48px;           /*使垂直居中*/
 padding:0px 20px;           /*使距离左边有一定距离*/    
 background: #f5f5f5;          /*背景颜色*/
 border-bottom: 1px solid #efefef;       /*底边框*/
 border-radius:8px 8px 0 0;         /* 左上角和右上角使用半径为5px的圆角,此属性为CSS3标准属性 */ 
 -moz-border-radius: 8px 8px 0 0;       /* Mozilla浏览器的私有属性 */ 
 -webkit-border-radius:8px 8px 0 0;       /* Webkit浏览器的私有属性 */ /*窗口圆角*/
 color: #535353;
 font-size: 16px;           /*字体颜色和字体大小*/
 cursor: move;            /*可移动样式*/
 -moz-user-select: none;          /* Firefox all */
 -webkit-user-select: none;         /* Chrome all / Safari all /opera15+*/ 
 -ms-user-select: none;          /*IE10*/
 -khtml-user-select: none;         /*早期浏览器*/
 user-select:none;
 -o-user-select: none;          /* 以上两个属性目前并未支持,写在这里为了减少风险 */ 
 }

这里有几个知识点需要理解:
 1. css3(border-radius)边框圆角
 border-radius 是一种缩写方法。另外其四个值是按照top-left、top-right、bottom-right、bottom-left的顺序来设置的其主要会有下面几种情形出现:
 1.只有一个值,那么 top-left、top-right、bottom-right、bottom-left 四个值相等。
 2.有两个值,那么 top-left 等于 bottom-right,并且取第一个值;top-right 等于 bottom-left,并且取第二个值
 3.有三个值,其中第一个值是设置top-left;而第二个值是 top-right 和 bottom-left 并且他们会相等,第三个值是设置 bottom-right。
 4.有四个值,其中第一个值是设置 top-left 而第二个值是 top-right 第三个值 bottom-right 第四个值是设置 bottom-left。
 支持的浏览器: 

JavaScript简单实现弹出拖拽窗口(二)

2.  cursor: move

cursor 属性规定所显示的指针(光标)的类型。
 属性值为move时,表示此光标所指的对象是可以移动的,通常为一个交叉箭头,如图。

JavaScript简单实现弹出拖拽窗口(二)

3.user-select:用来控制内容的可选择性
 auto——默认值,用户可以选中元素中的内容
 none——用户不能选择元素中的任何内容
 text——用户可以选择元素中的文本
 element——文本可选,但仅限元素的边界内(只有IE和FF支持)
 需要注意的是:user-select并不是一个W3C的CSS标准属性,浏览器支持的不完整,需要对每种浏览器进行调整
 user-select说明:
 设置或检索是否允许用户选中文本。
 (1)IE6-9不支持该属性,但支持使用标签属性 onselectstart="return false;" 来达到 user-select:none 的效果;Safari和Chrome也支持该标签属性;
 (2)直到Opera12.5仍然不支持该属性,但和IE6-9一样,也支持使用私有的标签属性 unselectable="on" 来达到 user-select:none 的效果;
 (3)unselectable 的另一个值是 off;除Chrome和Safari外,在其它浏览器中,如果将文本设置为 -ms-user-select:none;,则用户将无法在该文本块中开始选择文本。
 不过,如果用户在页面的其他区域开始选择文本,则用户仍然可以继续选择将文本设置为 -ms-user-select:none; 的区域文本.
 分析以下代码(注意:此代码及此代码的分析结果来自w3help):

<!DOCTYPE html>
<html>
<body>
  <div unselectable="on" style="background:#CCC;" >unselectable=on </div>
  <br/>
  <div style="background:#CCC;-webkit-user-select:none;" >-webkit-user-select:none;</div>
  <br/>
  <div style="background:#CCC;-moz-user-select:none;" >-moz-user-select:none;</div>
  <br/>
  <div style="background:#CCC;" onselectstart="return false;" >onselectstart="return false;"</div>
</body>
</html>

在各浏览器中效果如下:

JavaScript简单实现弹出拖拽窗口(二)

注1:可以禁止内容选中。
注2:没有禁止内容选中。
 可见,禁止内容选中的方法如下:
 IE 给标签设置 unselectable= "on" ,设置标签方法 onselectstart="return false;"
 Firefox 给标签设置私有样式 -moz-user-select:none 。
 Chrome Safari 给标签设置私有样式 -webkit-user-select:none ,设置标签方法 onselectstart="return false;"。
 Opera 给标签设置 unselectable= "on" 

 解决方案
 给标签设置样式 -moz-user-select:none ;-webkit-user-select:none 同时标签设置 unselectable= "on" ,保证各浏览器都可以禁止内容选中。
 如案例中给悬浮差弹出窗的标题栏设置禁止选中样式,可以这样设置:

<div class="popup_title" id="popup_title" unselectable= "on" >
 登录
  <a href="javascript:hidepopup();" class="popup_closebutton"></a>
</div>
.popup_title{
 -moz-user-select: none;          /* Firefox all */
 -webkit-user-select: none;         /* Chrome all / Safari all /opera15+*/ 
 -ms-user-select: none;          /*IE10*/
 -khtml-user-select: none;         /*早期浏览器*/
 user-select:none;
 -o-user-select: none;          /* 以上两个属性目前并未支持,写在这里为了减少风险 */ 
}

 注意:本文为原创, 地址:http://www.cnblogs.com/wanghuih/p/5576910.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js弹窗代码 可以指定弹出间隔
Jul 03 Javascript
function foo的原型与prototype属性解惑
Nov 19 Javascript
JS+CSS实现一个气泡提示框
Aug 18 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
JavaScript计划任务后台运行的方法
Dec 18 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
基于AngularJS前端云组件最佳实践
Oct 20 Javascript
基于pako.js实现gzip的压缩和解压功能示例
Jun 13 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
在Vue中使用icon 字体图标的方法
Jun 14 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
JS实现随机抽取三人
Nov 06 Javascript
JS中递归函数
Jun 17 #Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 #Javascript
JavaScript简单实现弹出拖拽窗口(一)
Jun 17 #Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 #Javascript
聊一聊JS中this的指向问题
Jun 17 #Javascript
json实现添加、遍历与删除属性的方法
Jun 17 #Javascript
confirm确认对话框的实现方法总结
Jun 17 #Javascript
You might like
PHP文件上传主要代码讲解
2013/09/30 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
Vue中props的详解
2019/05/16 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
简单介绍Python中的floor()方法
2015/05/15 Python
在Django中使用Sitemap的方法讲解
2015/07/22 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
会计专业毕业生推荐信
2013/11/05 职场文书
决心书范文
2014/03/11 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
银行求职信范文
2014/05/26 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
初中优秀学生评语
2014/12/29 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书