js实现兼容IE和FF的上下层的移动


Posted in Javascript onMay 04, 2015

这里给大家分享的是项目中的一个小需求,本来很简单,可是整了好久才把FF的兼容性搞定。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>仿265上下层的移动(上移,下移)支持IE、FF</title>
<style type="text/css">
/*<![CDATA[*/
ul{
width:400px
}
li{
border:1px solid gray;
list-style:none
}
.txt{
padding:4px;
background-color:#ffffff
}
/*]]>*/
</style>
<script language="javascript" type="text/javascript">
//<![CDATA
window.onload=function(){
ggGroup(document.getElementById('test'),5);
};
function ggGroup(ele,margin){
margin=margin||0;
var bgcolors='#b3d580,#99c9b1,#b4a1d8,#f7c480,#d5d588,#eea2bb'.split(',');
var txtUp='上移↑ ',txtDown='下移↓';
var panels=children(ele);
for(var i=0,h=0;i<panels.length;i++){
var p=panels[i];
p.style.position='absolute';
p.style.width='100%';
var b=document.createElement('div');
with(b.style){
fontSize='12px';
padding='4px';
backgroundColor=bgcolors[i%bgcolors.length];
textAlign='right';
}
b.innerHTML='<span>'+txtUp+'</span><span>'+txtDown+'</span>';
b.firstChild.onclick=moveup;
b.firstChild.style.cursor='pointer';
b.lastChild.onclick=movedown;
b.lastChild.style.cursor='pointer';
p.insertBefore(b,p.firstChild);
p.style.top=h+'px';
p.index=i;
h+=p.offsetHeight+margin;
}
ele.style.height=h+'px';
ele.style.position='relative'; 
check(0,i-1); 
function check(){
for(var i=0;i<arguments.length;i++){
var x=arguments[i];
var c=panels[x].firstChild.childNodes;
c[0].style.visibility=x==0?'hidden':'visible';
c[1].style.visibility=x==panels.length-1?'hidden':'visible';
panels[x].index=x;
}
}
function moveup(evt){
var p=evt?evt.target:event.srcElement;
p=p.parentNode.parentNode;
swap(p,panels[p.index-1]);
}
function movedown(evt){
var p=evt?evt.target:event.srcElement;
p=p.parentNode.parentNode;
swap(p,panels[p.index+1]);
}
function swap(p1,p2){
var N=10;
var INTV=200;
var arr1,arr2;
var t1=parseInt(p1.style.top),t2=parseInt(p2.style.top);
var h1=p1.offsetHeight+margin,h2=p2.offsetHeight+margin;
arr1=makeArr(t1,t1<t2?h2:-h2);
arr2=makeArr(t2,t1<t2?-h1:h1);
for(var i=0;i<N;i++)(function(){
var j=i;
setTimeout(function(){
p1.style.top=arr1[j]+"px";
p2.style.top=arr2[j]+"px";
if(j==N-1){
panels[p1.index]=p2;
panels[p2.index]=p1;
check(p1.index,p2.index);
}
},(j+1)*INTV/N);
})();
function makeArr(f,x){
var ret=[];
for(var i=0;i<N;i++)
ret[i]=Math.round(f+i*x/(N-1));
return ret;
}
}
function children(e){
var ret=[];
for(var i=0,c=e.childNodes;i<c.length;i++)
if(c[i].nodeType==1)
ret.push(c[i]);
return ret;
}
}
//]]>
</script>
</head>
<body>
<ul id="test">
<li> <div class="txt"><h2>Hello<br />baby</h2></div></li>
<li> <div class="txt">
显示内容1显示内容1显示内容1显示内容1
</div></li>
<li>
<div class="txt">
<i>人之初,性本善</i>
</div></li>
<li>
<div class="txt">
显示内容2<br />显示<br />...<br />显示内容2!
</div></li>
</ul>
</body>
</html>

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JQuery 引发两次$(document.ready)事件
Jan 15 Javascript
window.open不被拦截的实现代码
Aug 22 Javascript
js字符串转成JSON
Nov 07 Javascript
JS中的二叉树遍历详解
Mar 18 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
Aug 12 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
bootstrap multiselect 多选功能实现方法
Jun 05 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
刷新页面后让控制台的js代码继续执行
Sep 20 Javascript
Vue实现随机验证码功能
Dec 29 Vue.js
jQuery结合CSS制作漂亮的select下拉菜单
May 03 #Javascript
jQuery实现的向下图文信息滚动效果
May 03 #Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 #Javascript
JQuery页面地址处理插件jqURL详解
May 03 #Javascript
jQuery的animate函数实现图文切换动画效果
May 03 #Javascript
php+ajax+jquery实现点击加载更多内容
May 03 #Javascript
jquery插件hiAlert实现网页对话框美化
May 03 #Javascript
You might like
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
js类 from qq
2006/11/13 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
javascript回调函数详解
2018/02/06 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
Python列表解析配合if else的方法
2018/06/23 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
Python实现名片管理系统
2020/02/14 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
数据库面试要点基本概念
2013/10/31 面试题
《李广射虎》教学反思
2014/04/27 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
母亲节寄语大全
2015/02/27 职场文书
幼儿园开学通知
2015/04/24 职场文书
早会开场白台词大全
2015/06/01 职场文书
导游词之临安白水涧
2019/11/05 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
python学习之panda数据分析核心支持库
2021/05/07 Python