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 相关文章推荐
javascript dom代码应用 简单的相册[firefox only]
Jun 12 Javascript
js中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
js中 关于undefined和null的区别介绍
Apr 16 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
Ajax 加载数据 练习代码
Jan 05 Javascript
vue里面父组件修改子组件样式的方法
Feb 03 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
Sep 05 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
May 28 Javascript
vue.js自定义组件directives的实例代码
Nov 09 Javascript
微信小程序-可移动菜单的实现过程详解
Jun 24 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
一个用于网络的工具函数库
2006/10/09 PHP
生成php程序的php代码
2008/04/07 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
Jquery getJSON方法详细分析
2013/12/26 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
python套接字流重定向实例汇总
2016/03/03 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
清华大学自主招生自荐信
2014/01/29 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python