使用原生JS实现弹出层特效


Posted in Javascript onDecember 22, 2014

创建遮罩层

  _createCover: function() {

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

      newMask.id = this._mark;

      newMask.style.position = "absolute";

      newMask.style.zIndex = "100";

      _scrollWidth = Math.max(document.body.scrollWidth,document.documentElement.scrollWidth);

      _scrollHeight = Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);

      newMask.style.width = _scrollWidth + "px";

      newMask.style.height = _scrollHeight + "px";

      newMask.style.top = "0px";

      newMask.style.left = "0px";

      newMask.style.background = "#000";

      newMask.style.filter = "alpha(opacity=50)";

      newMask.style.opacity = "0.50";

      newMask.style.display = 'none';

      document.body.appendChild(newMask);

      this._cover = newMask;

  }

新建弹出层

  _createFloater: function(html) {

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

      newDiv.id = this._id;

      newDiv.style.position = "absolute";

      newDiv.style.zIndex = "9999";

      newDivWidth = 400;

      newDivHeight = 200;

      newDiv.style.width = newDivWidth + "px";

      newDiv.style.height = newDivHeight + "px";

      newDiv.style.top = (document.body.scrollTop + document.body.clientHeight/2 - newDivHeight/2) + "px";

      newDiv.style.left = (document.body.scrollLeft + document.body.clientWidth/2 - newDivWidth/2) + "px";

      newDiv.style.padding = "5px";

      newDiv.style.display = 'none';

      newDiv.innerHTML = html;

      document.body.appendChild(newDiv);

      this._floater = newDiv;

  }

调节弹层位置

     addjustPosition: function() {

         this._floater.style.top = (document.body.scrollTop + document.body.clientHeight/2 - newDivHeight/2) + "px";

         this._floater.style.left = (document.body.scrollLeft + document.body.clientWidth/2 - newDivWidth/2) + "px";

     }

屏幕滚动事件时调整位置

this._fS = BindAsEventListener(this, this.addjustPosition);

addEventHandler(window, "scroll", this._fS);

// 隐藏后需

removeEventHandler(window, "scroll", this._fS);

完整代码

 var Floater = (function(){

 var me = Class.create();

 me.prototype = {

     initialize: function(options) {

         this._fS = BindAsEventListener(this, this.addjustPosition);

         this.setOptions(options);

     },

     setOptions: function(options) {

         this.options = options || {};

         this._id = options.id;

         this._mark = 'mark';

     },

     show: function(html,options) {

         options = options || {};

         if(!this._cover){

             this._createCover();

         }

         if(!this._floater){

             this._createFloater(html);

         }

         if(options.saveOpt){

             this._saveOption = options.saveOpt;

             this.bindSaveEvent();

         }

         this._bindScrollEvent();

         this.addjustPosition();

         this._floater.style.display = '';

         this._cover.style.display = '';

         this.isShow = true;

     },

     insert: function(html,opts,att){

         var _e = document.createElement("div"), _t;

         _e.innerHTML = html;

         for(var k in opts){

             _e[k] = opts[k];

         }

         _t = this._floater.querySelector('['+att+']');

         if(_t){

             _t.appendChild(_e);

         }

     },

     getFloater: function(){

         if(this._floater){

             return this._floater;

         }

     },

     //遮罩层

     _createCover: function() {

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

         newMask.id = this._mark;

         newMask.style.position = "absolute";

         newMask.style.zIndex = "100";

         _scrollWidth = Math.max(document.body.scrollWidth,document.documentElement.scrollWidth);

         _scrollHeight = Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);

         newMask.style.width = _scrollWidth + "px";

         newMask.style.height = _scrollHeight + "px";

         newMask.style.top = "0px";

         newMask.style.left = "0px";

         newMask.style.background = "#000";

         newMask.style.filter = "alpha(opacity=50)";

         newMask.style.opacity = "0.50";

         newMask.style.display = 'none';

         document.body.appendChild(newMask);

         this._cover = newMask;

     },

     //新弹出层

     _createFloater: function(html) {

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

         newDiv.id = this._id;

         newDiv.style.position = "absolute";

         newDiv.style.zIndex = "9999";

         newDivWidth = 400;

         newDivHeight = 200;

         newDiv.style.width = newDivWidth + "px";

         newDiv.style.height = newDivHeight + "px";

         newDiv.style.top = (document.body.scrollTop + document.body.clientHeight/2 - newDivHeight/2) + "px";

         newDiv.style.left = (document.body.scrollLeft + document.body.clientWidth/2 - newDivWidth/2) + "px";

         newDiv.style.padding = "5px";

         newDiv.style.display = 'none';

         newDiv.innerHTML = html;

         document.body.appendChild(newDiv);

         this._floater = newDiv;

     },

     //弹出层滚动居中

     addjustPosition: function() {

         this._floater.style.top = (document.body.scrollTop + document.body.clientHeight/2 - newDivHeight/2) + "px";

         this._floater.style.left = (document.body.scrollLeft + document.body.clientWidth/2 - newDivWidth/2) + "px";

     },

     bindSaveEvent: function() {

         this._saveElem = this._floater.querySelector('['+this._saveOption.elem+']');

         if(this._saveElem){

             addEventHandler(this._saveElem, "click", this._saveOption.handler);

         }

     },

     _bindScrollEvent: function() {

         addEventHandler(window, "scroll", this._fS);

     },

     hide: function() {

         this.isShow = false;

         this.destory();

     },

     destory: function() {

         removeEventHandler(window, "scroll", this._fS);

         if(this._saveElem){

             removeEventHandler(this._saveElem, "click", this._saveOption.handler);

         }

         if (this._cover){

             document.body.removeChild(this._cover);

         }

         if (this._floater){

             document.body.removeChild(this._floater);

         }

         this._cover = null;

         this._floater = null;

     }

 };

 return me;

 })();
Javascript 相关文章推荐
Jquery+JSon 无刷新分页实现代码
Apr 01 Javascript
javascript的内存管理详解
Aug 07 Javascript
javascript 原型链维护和继承详解
Nov 26 Javascript
JavaScript使用concat连接数组的方法
Apr 06 Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
Dec 14 Javascript
简单的渐变轮播插件
Jan 12 Javascript
Bootstrap页面标题Page Header的实现方法
Mar 22 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
Nov 09 Javascript
微信小程序实现手指拖动选项排序
Apr 22 Javascript
JavaScript代码简化技巧实例解析
Sep 09 Javascript
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
jQuery基础知识小结
Dec 22 #Javascript
jQuery异步获取json数据方法汇总
Dec 22 #Javascript
jQuery的观察者模式详解
Dec 22 #Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 #Javascript
sails框架的学习指南
Dec 22 #Javascript
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 #Javascript
javascript动态创建及删除元素的方法
Dec 22 #Javascript
You might like
随机头像PHP版
2006/10/09 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
使用grappelli为django admin后台添加模板
2014/11/18 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
django云端留言板实例详解
2019/07/22 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
培训专员岗位职责
2014/02/26 职场文书
教室标语大全
2014/06/21 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL