简单实现js浮动框


Posted in Javascript onDecember 13, 2016

本文实例为大家分享了js浮动框的实现代码,供大家参考,具体内容如下

一.在需要加入浮动框的页面中加入如下css代码

<!-- 浮动窗口样式css begin -->
<style type="text/css">
#msg_win {
  border: 1px solid #A67901;
  background: #EAEAEA;
  width: 240px;
  position: absolute;
  right: 0;
  font-size: 12px;
  font-family: Arial;
  margin: 0px;
  display: none;
  overflow: hidden;
  z-index: 99;
}
#msg_win .icos {
  position: absolute;
  top: 2px;
  *top: 0px;
  right: 2px;
  z-index: 9;
}
.icos a {
  float: left;
  color: #833B02;
  margin: 1px;
  text-align: center;
  font-weight: bold;
  width: 14px;
  height: 22px;
  line-height: 22px;
  padding: 1px;
  text-decoration: none;
  font-family: webdings;
}
.icos a:hover {
  color: #fff;
}
#msg_title {
  background: #BBDEF6;
  border-bottom: 1px solid #A67901;
  border-top: 1px solid #FFF;
  border-left: 1px solid #FFF;
  color: #000;
  height: 25px;
  line-height: 25px;
  text-indent: 5px;
}
#msg_content {
  margin: 5px;
  margin-right: 0;
  width: 230px;
  height: 126px;
  overflow: hidden;
}
</style>
<!-- 浮动窗口样式css end -->

二.js代码(注意:该代码要添加整个页面最后,目的是页面加载完成时加载它)

<!-- 浮动窗口js,必须要放置到最后 begin-->
<script type="text/javascript">
var Message={
  set: function() {//最小化与恢复状态切换
    var set=this.minbtn.status == 1?[0,1,'block',this.char[0],'最小化']:[1,0,'none',this.char[1],'展开'];
    this.minbtn.status=set[0];
    this.win.style.borderBottomWidth=set[1];
    this.content.style.display =set[2];
    this.minbtn.innerHTML =set[3]
    this.minbtn.title = set[4];
    this.win.style.top = this.getY().top;
  },
  close: function() {//关闭
    this.win.style.display = 'none';
    window.onscroll = null;
  },
  setOpacity: function(x) {//设置透明度
    var v = x >= 100 ? '': 'Alpha(opacity=' + x + ')';
    this.win.style.visibility = x<=0?'hidden':'visible';//IE有绝对或相对定位内容不随父透明度变化的bug
    this.win.style.filter = v;
    this.win.style.opacity = x / 100;
  },
  show: function() {//渐显
    clearInterval(this.timer2);
    var me = this,fx = this.fx(0, 100, 0.1),t = 0;
    this.timer2 = setInterval(function() {
      t = fx();
      me.setOpacity(t[0]);
      if (t[1] == 0) {clearInterval(me.timer2) }
    },10);
  },
  fx: function(a, b, c) {//缓冲计算
    var cMath = Math[(a - b) > 0 ? "floor": "ceil"],c = c || 0.1;
    return function() {return [a += cMath((b - a) * c), a - b]}
  },
  getY: function() {//计算移动坐标
    var d = document,b = document.body, e = document.documentElement;
    var s = Math.max(b.scrollTop, e.scrollTop);
    var h = /BackCompat/i.test(document.compatMode)?b.clientHeight:e.clientHeight;
    var h2 = this.win.offsetHeight;
    return {foot: s + h + h2 + 2+'px',top: s + h - h2 - 2+'px'}
  },
  moveTo: function(y) {//移动动画
    clearInterval(this.timer);
    var me = this,a = parseInt(this.win.style.top)||0;
    var fx = this.fx(a, parseInt(y));
    var t = 0 ;
    this.timer = setInterval(function() {
      t = fx();
      me.win.style.top = t[0]+'px';
      if (t[1] == 0) {
        clearInterval(me.timer);
        me.bind();
      }
    },10);
  },
  bind:function (){//绑定窗口滚动条与大小变化事件
    var me=this,st,rt;
    window.onscroll = function() {
      clearTimeout(st);
      clearTimeout(me.timer2);
      me.setOpacity(0);
      st = setTimeout(function() {
      me.win.style.top = me.getY().top;
      me.show();
      },600);
    };
    window.onresize = function (){
      clearTimeout(rt);
      rt = setTimeout(function() {me.win.style.top = me.getY().top},100);
    }
  },
  init: function() {//创建HTML
    function $(id) {return document.getElementById(id)};
    this.win=$('msg_win');
    var set={minbtn: 'msg_min',closebtn: 'msg_close',title: 'msg_title',content: 'msg_content'};
    for (var Id in set) {this[Id] = $(set[Id])};
    var me = this;
    this.minbtn.onclick = function() {me.set();this.blur()};
    this.closebtn.onclick = function() {me.close()};
    this.char=navigator.userAgent.toLowerCase().indexOf('firefox')+1?['_','::','×']:['0','2','r'];//FF不支持webdings字体
    this.minbtn.innerHTML=this.char[0];
    this.closebtn.innerHTML=this.char[2];
    setTimeout(function() {//初始化最先位置
      me.win.style.display = 'block';
      me.win.style.top = me.getY().foot;
      me.moveTo(me.getY().top);
    },0);
    return this;
  }
};
Message.init();
</script>
<!-- 浮动窗口js end-->

三.html代码(注意:该代码要放置到body的最后)

<!-- 浮动窗口html代码 begin -->
<hr>
<div id="msg_win" style="display: block; top: 490px; visibility: visible; opacity: 1;">
 <div class="icos">
  <a id="msg_min" title="最小化" href="javascript:void 0">_</a><a id="msg_close" title="关闭" href="javascript:void 0">×</a>
 </div>
 <div id="msg_title">设备运行情况--></div>
 <div id="msg_content" style="overflow: auto; height: 150px; width: 100%; white-space: nowrap">
  ${commonMsg.devRun } 
 </div>
</div>
<!-- 浮动窗口html代码 end -->

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

Javascript 相关文章推荐
浅谈JavaScript之事件绑定
Jul 08 Javascript
一个不错的仿携程自定义数据下拉选择select
Sep 01 Javascript
JavaScript实现Iterator模式实例分析
Jun 09 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
深入理解vue.js双向绑定的实现原理
Dec 05 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
Feb 20 Javascript
js实现楼层导航功能
Feb 23 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
Jul 10 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
Oct 18 Javascript
gulp构建小程序的方法步骤
May 31 Javascript
javascript中this关键字详解
Dec 12 #Javascript
深入理解javascript函数参数与闭包
Dec 12 #Javascript
smartupload实现文件上传时获取表单数据(推荐)
Dec 12 #Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 #Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 #Javascript
深入理解javascript中concat方法
Dec 12 #Javascript
js仿微信语音播放实现思路
Dec 12 #Javascript
You might like
php下删除字符串中HTML标签的函数
2008/08/27 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
详解Python中的type()方法的使用
2015/05/21 Python
python实现手机通讯录搜索功能
2018/02/22 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python多进程原理与用法分析
2018/08/21 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
python如何绘制疫情图
2020/09/16 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
全球性的在线购物网站:Zapals
2017/03/22 全球购物
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
《维生素c的故事》教学反思
2014/02/18 职场文书
询价采购方案
2014/06/09 职场文书
学校师德师风整改方案
2014/10/28 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
python某漫画app逆向
2021/03/31 Python
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js