纯Javascript实现Windows 8 Metro风格实现


Posted in Javascript onOctober 15, 2013

Metro风格设计主要特点

1.Windows 8 Metro风格设计,实现网站或系统功能的导航

2.纯Javascript实现

3.支持所有IE、360、Chrome等常用浏览器

4.支持圆角、阴影、卡片切换等特效

5.支持卡片的放大、缩小、增加、删除等功能

6.可自定义卡片背景色、背景图片、卡片图片、卡片文字

7.卡片间可任意切换

Metro风格截图
纯Javascript实现Windows 8 Metro风格实现 
Metro部分算法

卡片显示部分代码:

str='<li data-mode="flip" id="'+itemID+'" data-sizex="1" data-sizey="1" class="stylediv2" style="float:left;left:'+left+'px;top:'+top+'px;width: '+addwidth+'px; height: '+addheight+'px;background-color:'+backColor+';position:absolute;z-index:2; cursor:pointer;border-radius:5px;box-shadow:0 4px 10px rgba(0, 0, 0, .35); behavior: url('+imgBasePath+'js/ie.htc);" onMouseOver="showOption(this)" onMouseOut="hiddeOption(this)">'; 
str+='<div style="float:left;position:absolute;left:0px;top:0px;width: '+addwidth+'px; height: '+addheight+'px;background-color:orange;"></div>'; 
str+='<div style="float:left;position:absolute;left:0px;top:0px;width: '+addwidth+'px; height: '+addheight+'px;background-color:red;"></div>'; 
str+='</li>';

移动单元格JS脚本:
function moveItem(objid,indexList){ 
//判断是否有效移动. 
var curItem=getCurItem(objid); 
var curIndex=curItem.index; 
for(var i=0;i<indexList.length;i++){ 
var miIndex=parseInt(indexList[i]); 
if((curIndex+1)==miIndex&&(curIndex+1)%colSize==0){ 
alertInfo("最后一列不能调大!"); 
return false; 
} 
if(miIndex>=(rowSize*colSize)){ 
alertInfo("不能超过三行!"); 
return false; 
} 
var cellnum=getItemCellNum(miIndex); 
if(cellnum!=1){ 
alertInfo("被移动单元格目前只支持1个单元格!"); 
return false; 
} 
} 
//判断是否超过所规定显示区域 
var nullnum=0; 
var nullIndexArray=new Array(); 
for(var i=0;i<itemArray.length;i++){ 
var tmpItem=itemArray[i]; 
var objvalue=tmpItem.value; 
if(itemvalueforspace==objvalue||itemvaluefornull==objvalue){ 
var isexitarea=false; 
for(var j=0;j<indexList.length;j++){ 
var miIndex=parseInt(indexList[j]); 
if(i==miIndex){ 
isexitarea=true; 
break; 
} 
} 
nullnum=nullnum+1; 
if(!isexitarea){ 
nullIndexArray.push(i); 
} 
} 
} 
if((itemArray.length-nullnum+indexList.length)>(rowSize*colSize)){ 
alertInfo("调大单元格已超出所显示区域!"); 
return false; 
} 
//调整移动单元格的队列. 
for(var i=0;i<indexList.length;i++){ 
var miIndex=parseInt(indexList[i]); 
var moveItem=itemArray[miIndex]; 
if(moveItem==undefined){//不存在. 
for(var j=itemArray.length;j<=miIndex;j++){ 
addNullItem(""); 
} 
moveItem=itemArray[miIndex]; 
} 
//undefined 
var moveValue=moveItem.value; 
moveItem.value=curItem.value; 
itemArray[miIndex]=moveItem; 
if(moveValue!=itemvalueforspace){//覆盖单元格中已有对象. 
//覆盖单元格移到最后 
var moveIndex=itemArray.length; 
var col=moveIndex%colSize; 
var row=(moveIndex-col)/colSize; 
var moveLeft=splitspace+col*(initwidth+splitspace); 
var moveTop=splitspace+row*(initheight+splitspace); 
var moveCacheItem=new Object(); 
moveCacheItem.index=moveIndex; 
moveCacheItem.id=itemPrefix+(moveIndex+1); 
moveCacheItem.x=moveLeft; 
moveCacheItem.y=moveTop; 
moveCacheItem.value=moveValue; 
itemArray.push(moveCacheItem); 
var moveObj=document.getElementById(moveValue); 
moveObj.style.top=moveTop+"px"; 
moveObj.style.left=moveLeft+"px"; 
}else{//null单元格,需要删除null单元格. 
//del(moveItem.id); 
} } 
//检查空缺单元格,如果存在,就填充null对象. 
for(var i=itemArray.length-1;i>=(rowSize*colSize);i--){ 
var movitem=itemArray[i]; 
var nulitemIndex=nullIndexArray[nullIndexArray.length-1]; 
var nulitem=itemArray[nulitemIndex]; 
var moveObj=document.getElementById(movitem.value); 
//console.log("id="+movitem.id+"//value="+movitem.value+"//top="+nulitem.y+"//left="+nulitem.x); 
moveObj.style.top=parseInt(nulitem.y)+"px"; 
moveObj.style.left=parseInt(nulitem.x)+"px"; 
//console.log("nullid="+nulitem.id+"//moveid="+movitem.id+"//value="+movitem.value+"//top="+nulitem.y+"//left="+nulitem.x); 
getElement(sortablecurid).removeChild(getElement(nulitem.id)); 
nulitem.value=movitem.value; 
itemArray[nulitemIndex]=nulitem; 
itemArray.pop(); 
nullIndexArray.pop(); 
} 
printItemArray(); 
return true; 
}

待续……
Javascript 相关文章推荐
Javascript 构造函数,公有,私有特权和静态成员定义方法
Nov 30 Javascript
Jquery中显示隐藏的实现代码分析
Jul 26 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
location.href用法总结(最主要的)
Dec 27 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
常用Javascript函数与原型功能收藏(必看篇)
Oct 09 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
EasyUI折叠表格层次显示detailview详解及实例
Dec 28 Javascript
vue.js 获取select中的value实例
Mar 01 Javascript
微信小程序使用蓝牙小插件
Sep 23 Javascript
微信小程序实现拖拽功能
Sep 26 Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 #Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 #Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 #Javascript
JS 实现点击a标签的时候让其背景更换
Oct 15 #Javascript
JS操作Cookies的小例子
Oct 15 #Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 #Javascript
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 #Javascript
You might like
使用PHP批量生成随机用户名
2008/07/10 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
php文件系统处理方法小结
2016/05/23 PHP
php实现学生管理系统
2020/03/21 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python切片操作实例分析
2018/03/16 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
安全承诺书范文
2014/03/26 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js