动态删减选项卡的效果示例

<html>
<head>
 <title>163邮箱选项卡效果</title>
 <script>
 </script>
 <style>
  ul,li
  {
   margin:0;
   padding:0;
   list-style:none;
   /*for close location*/
   position:relative;
  }
  li
  {
   display:block;
   width:130px;
   height:25px;
   float:left;
   cursor:pointer;
   overflow:hidden;
  }
  span
  {
   font-size:10pt;
   color:#22b5d9;
   font-weight:bold;
   display:block;
  }
  #asgardCard li
  {
   font-size:10pt;
   font-weight:bold;
   color:#22b5d9;
   border:1px solid #22b5d9;
   margin:10px;
   text-align:center;
   line-height:1.5;
  }
 </style>
 
 <style>
  /*Asgard CardProgram Css Start*/
  #itemsPanel,#itemsPanel li
  {
   margin:0;
   padding:0;
   list-style:none;
   /*for close location*/
   position:relative;
  }
  /*Clear Float:Referrence-->http://www.blueidea.com/tech/web/2005/3065.asp*/
  /*There is defect:the attribute-content hold one line place.*/
  ul:after
  {
      content: ".";
      display: block;
      height: 0;
      clear: both;
      visibility: hidden;
  }
  #cardContent
  {
   height:auto;
   min-height:300px;
   border:2px solid #cccccc;
   clear:both;
  }
  #itemsPanel li
  {
   display:block;
   width:130px;
   height:25px;
   float:left;
   cursor:pointer;
   overflow:hidden;
  }
  #cardFrame
  {
   width:100%;height:100%;border:1px solid #ffffff;margin:0;
  }
  .active
  {  
   background:url('http://bbs.blueidea.com/attachments/2007/8/20/20070820_b3321ab700a7e293b3ceJODnkLUsGEhy.jpg') 0 0 no-repeat;
  } 
  .default
  {
   background:url('http://bbs.blueidea.com/attachments/2007/8/20/20070820_b3321ab700a7e293b3ceJODnkLUsGEhy.jpg') 0 -25px no-repeat;
  }
  .title
  {
   font-size:10pt;
   font-weight:bold;
   line-height:2;
   padding-left:10px;
   display:block;
   width:105px;
   height:25px;
  }
  li .close
  {  
   position:absolute;
   top:9px;
   left:115px;
   display:block;
   width:10px;
   height:10px;
   overflow:hidden;
  }
  .active .close
  {
   background:url('http://bbs.blueidea.com/attachments/2007/8/20/20070820_b3321ab700a7e293b3ceJODnkLUsGEhy.jpg') 0 -50px no-repeat;
  }
  .default .title
  {
   color:#999999;
  }
  .active .title
  {
   color:#000000;
  }
  .active .close:hover
  {
   background:url('http://bbs.blueidea.com/attachments/2007/8/20/20070820_b3321ab700a7e293b3ceJODnkLUsGEhy.jpg') -10px -50px no-repeat;
  }
  .default .close
  {
   background:url('http://bbs.blueidea.com/attachments/2007/8/20/20070820_b3321ab700a7e293b3ceJODnkLUsGEhy.jpg') -20px -50px no-repeat;
  }
  .default .close:hover
  {
   background:url('http://bbs.blueidea.com/attachments/2007/8/20/20070820_b3321ab700a7e293b3ceJODnkLUsGEhy.jpg') -30px -50px no-repeat;
  }
  /*Asgard CardProgram Css End*/
 </style>
</head>
<body>
<span>1.代码效果示例:</span>
<ul>
 <li class="active">
  <nobr class="title">Kiss</nobr>
  <a href="#nogo" class="close" title="关闭"></a>
 </li>
 <li class="default">
  <nobr class="title">Andy</nobr>
  <a href="#nogo" class="close" title="关闭"></a>
 </li>
</ul>
<p />
<span>注:以上代码为DOM动态组织的代码参考<span>
<p style="clear:both;"/>
<p />
<span>2.点击下表,更换内容</span>
<ul id="asgardCard">
<li title="blueidea">蓝色理想</li>
<li title="google">Google中国</li>
<li title="email126">Email-126</li>
<li title="ngacn">艾泽拉斯</li>
</ul>
<p style="clear:both;"/>
<span>3.以下为动态创建:</span>
<div>
 <ul id="itemsPanel">
 </ul>
 <div id="cardContent">
 <iframe id="cardFrame">
 </iframe>
 </div>
</div>
</body>
<script>
/*
* Field Declare ^-^
*/
var Asgard;
if(!Asgard)
 Asgard={};
if(!Asgard.CardProgram)
 Asgard.CardProgram={};
/*
*function:define Object ItemsPanel
*/
Asgard.CardProgram.ItemsPanel=function(id,frameId)
{
 this.element=$(id);
 this.register=new Array();
 this.currentItem=null;
 this.cardFrame=$(frameId);
 this.element.className='itemsPanel';
}
/*
*function:add item from panel
*/
Asgard.CardProgram.ItemsPanel.prototype.addItem=function(item)
{
 if(this.validateExist(item.element.getAttribute('id')))
   return;
 item.panel=this;
 this.visitedRegister(item,"add");
 this.element.appendChild(item.element);
}
/*
*function:delete item from panel
*/
Asgard.CardProgram.ItemsPanel.prototype.deleteItem=function(item)
{  
 this.visitedRegister(item,"delete");
 this.element.removeChild(item.element);
}
/*
*Ajax or other
*/
Asgard.CardProgram.ItemsPanel.prototype.changeSubPage=function()
{
 if(this.register.length==0)
 {
  this.cardFrame.src="";
  return;
 }
 
 this.cardFrame.src=this.currentItem.url;
 /*
 *这里用户可以自己定义想要的页面,如果你想内嵌IFrame。
 */
}
Asgard.CardProgram.ItemsPanel.prototype.validateExist=function(id)
{
 for(var i=0;i<this.register.length;i++)
 {
  if(this.register[i].element.id==id)
  {
   return true;
  }
 }
 return false;
}
/*
*function:register visited sequence
*      type--add | delete | active
*/
Asgard.CardProgram.ItemsPanel.prototype.visitedRegister=function(item,type)
{
 var i=this.register.length;
 if(type=="add")
 { 
  for(var k=0;k<i;k++)
  {
   this.register[k].resetItem();
  }
  this.currentItem=item;
  this.register[i]=item;
  this.currentItem.element.className="active";
 
  this.changeSubPage();
 }
 else if(type=="delete")
 {    
  for(k=0;k<i;k++)
  {
   if(this.register[k]==item)
   {
    this.register.splice(k,1);
    break;
   }
  }
  if(item==this.currentItem)
  {
   i=this.register.length;
   if(i>0)
   {
    this.currentItem=this.register[i-1];
    this.currentItem.element.className="active";
   }
   else
    this.currentItem=null;
  }
 
  this.changeSubPage();
 }
 else if(type=="active")
 {
  if(this.currentItem==item)
   return;
  else
  {    
   for(k=0;k<i;k++)
   {
    if(this.register[k]==item)
    {
     this.register.splice(k,1);
     break;
    }
   }
  
   i=this.register.length;
   for(k=0;k<i;k++)
   {
    this.register[k].resetItem();
   }
   this.currentItem=item;
   this.register.push(item);
  }
 
  this.changeSubPage();
 }
}
/*
*function:define Object Item
*/
Asgard.CardProgram.Item=function(id,title,url,flag)
{
 this.element=this.$C();
 this.panel={};
 this.id=id;
 this.title=title;
 this.url=url;
 this.flag=flag;
 this.init();
};
/*
*function:init item
*/
Asgard.CardProgram.Item.prototype.init=function()
{
 this.element.setAttribute('id',this.id);
 this.element.className="default"; 
 
 var mirror=this;
 if(!this.flag)
 { 
  this.element.innerHTML="<nobr class='title' title='"+this.title+"'>"+this.title+"</nobr>"+"<a href='#nogo' class='close' title='关闭'></a>"; 
  this.addEventListener(this.$ES(this.element,'nobr')[0],'click',function(){mirror.activeItem();});
  this.addEventListener(this.$ES(this.element,'a')[0],'click',function(){mirror.destroyItem();});
 }
 else
 {
  this.element.innerHTML="<nobr class='title' title='"+this.title+"'>"+this.title+"</nobr>";
  this.addEventListener(this.$ES(this.element,'nobr')[0],'click',function(){mirror.activeItem();});
 }
 
}
/*
*active item
*/
Asgard.CardProgram.Item.prototype.activeItem=function()
{
 this.panel.visitedRegister(this,"active");
 this.element.className="active";
}
/*
*function:reset item
*/
Asgard.CardProgram.Item.prototype.resetItem=function()
{
 this.element.className="default";
}
/*
*function:destroy item
*/
Asgard.CardProgram.Item.prototype.destroyItem=function()
{
 this.panel.deleteItem(this);
}
/*
*function:addListener to item
*/
Asgard.CardProgram.Item.prototype.addEventListener=function(element,type,handler)
{
 if(element.addEventListener)
  element.addEventListener(type,handler,true);
 else
  element.attachEvent("on"+type,handler,true);
}
/*
*function:usefull functions
*/
Asgard.CardProgram.Item.prototype.$C=function(tag)
{
 if(tag  &&  typeof tag =="string")
   return document.createElement(tag);
 else
  return document.createElement('li');
}
Asgard.CardProgram.Item.prototype.$ES=function(element,tag)
{
 return element.getElementsByTagName(tag);
}
function $(id)
{
 return document.getElementById(id);
}
</script>
<script>
function attachExampleEvent()
{
 var lists=$('asgardCard').getElementsByTagName('li');
 for(var i=0;i<lists.length;i++)
 {
  lists[i].onclick=exampleClickListener;
 }
}
function exampleClickListener(e)
{
 e=e || window.event;
 var source=e.target || e.srcElement;
 if(source.getAttribute('title')=='blueidea')
 {
   itemsPanel.addItem(new Asgard.CardProgram.Item("blueidea","蓝色理想"," http://www.blueidea.com",false));
 }
 else if(source.getAttribute('title')=='google')
 {
   itemsPanel.addItem(new Asgard.CardProgram.Item("google","Google中国"," http://www.google.cn",false));
 }
 else if(source.getAttribute('title')=='email126')
 {
   itemsPanel.addItem(new Asgard.CardProgram.Item("email126","Email-126"," http://mail.126.com",false));
 }
 else if(source.getAttribute('title')=='ngacn')
 {
   itemsPanel.addItem(new Asgard.CardProgram.Item("ngacn","艾泽拉斯"," http://www.ngacn.com",false));
 }
}
var itemsPanel=null;
function exampleStartMethod()
{
 attachExampleEvent();
 if(itemsPanel==null)
  itemsPanel=new Asgard.CardProgram.ItemsPanel("itemsPanel","cardFrame");
 itemsPanel.addItem(new Asgard.CardProgram.Item("index","Ajax中国"," http://www.okajax.com",true));
}
window.onload=exampleStartMethod;
</script>
</html>
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值