简单实现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实现的网页局布刷新效果
Dec 01 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
JQuery+Ajax无刷新分页的实例代码
Feb 08 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
angularjs的一些优化小技巧
Dec 06 Javascript
JS实现的5级联动Select下拉选择框实例
Aug 17 Javascript
JS实现超简单的仿QQ折叠菜单效果
Sep 21 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
AngularJS实现的2048小游戏功能【附源码下载】
Jan 03 Javascript
页面点击小红心js实现代码
May 26 Javascript
Vue起步(无cli)的啊教程详解
Apr 11 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
乱谈我对耳机、音箱的感受
2021/03/02 无线电
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
JavaScript事件列表解说
2006/12/22 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
JS中数组重排序方法
2016/11/11 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
selenium+python环境配置教程详解
2019/05/28 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
Python读取表格类型文件代码实例
2020/02/17 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
市场营销专业个人求职信范文
2013/12/14 职场文书
小学课外活动总结
2014/07/09 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书