简单实现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 相关文章推荐
JS实现清除指定cookies的方法
Sep 20 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
node.js+jQuery实现用户登录注册AJAX交互
Apr 28 jQuery
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
10个最优秀的Node.js MVC框架
Aug 24 Javascript
js 索引下标之li集合绑定点击事件
Jan 12 Javascript
浅谈在node.js进入文件目录的问题
May 13 Javascript
layer插件select选中默认值的方法
Aug 14 Javascript
新手快速上手webpack4打包工具的使用详解
Jan 28 Javascript
微信小程序如何实现在线客服功能
Oct 16 Javascript
ES6箭头函数和扩展实例分析
May 23 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代码
2010/07/17 PHP
php字符串操作常见问题小结
2016/10/11 PHP
tangram框架响应式加载图片方法
2013/11/21 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
js使用心得分享
2015/01/13 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
简单理解Python中基于生成器的状态机
2015/04/13 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
python基于SMTP协议发送邮件
2019/05/31 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
电子商务专业自我鉴定
2013/12/18 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android