纯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 相关文章推荐
jQuery的一些注意
Dec 06 Javascript
js获取当前select 元素值的代码
Apr 19 Javascript
鼠标事件延时切换插件
Mar 12 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
May 14 Javascript
Jquery Ajax Error 调试错误的技巧
Nov 20 Javascript
多个js毫秒倒计时同时进行效果
Jan 05 Javascript
解决jquery无法找到其他父级子集问题的方法
May 10 Javascript
JavaScript String 对象常用方法详解
May 13 Javascript
10道典型的JavaScript面试题
Mar 22 Javascript
JS设置手机验证码60s等待实现代码
Jun 14 Javascript
Element Rate 评分的使用方法
Jul 27 Javascript
vue 页面跳转的实现方式
Jan 12 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php实现httpclient类示例
2014/04/08 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
表单内同名元素的控制
2006/11/22 Javascript
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
python中对_init_的理解及实例解析
2019/10/11 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
Delphi笔试题
2016/11/14 面试题
2014年基层党组织公开承诺书
2014/03/29 职场文书
副董事长岗位职责
2014/04/02 职场文书
对教师的评语
2014/04/28 职场文书
长江七号观后感
2015/06/11 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android