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通过Ajax提交表单并返回结果
Jul 31 Javascript
jquery动态添加删除div 具体实现
Jul 20 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
轻松掌握JavaScript享元模式
Aug 27 Javascript
js控制div层的叠加简单方法
Oct 15 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
vue指令以及dom操作详解
Mar 04 Javascript
javascript简单链式调用案例分析
May 10 Javascript
详解ES6语法之可迭代协议和迭代器协议
Jan 13 Javascript
JS document内容及样式操作完整示例
Jan 14 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
Jun 04 Javascript
vue的$http的get请求要加上params操作
Nov 12 Javascript
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
深入PHP许愿墙模块功能分析
2013/06/25 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
PHP中的session安全吗?
2016/01/22 PHP
php微信公众号开发之简答题
2018/10/20 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
javascript事件问题
2009/09/05 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
潜说js对象和数组
2011/05/25 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
wxPython的安装与使用教程
2018/08/31 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
python3 线性回归验证方法
2019/07/09 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
口头翻译求职人自荐信
2013/12/07 职场文书
走群众路线剖析材料
2014/10/09 职场文书
员工评语范文
2014/12/31 职场文书
年度考核个人总结
2015/03/06 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
《社戏》教学反思
2016/02/22 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js