一、轮播图
效果图:
要实现轮播图的效果还是要用到上一期提到的简易动画效果的move函数、getStyle函数
/* 创建一个执行简单动画的函数
参数:
obj :执行动画的对象
attr:要执行动画的样式,例如:left\top\height
target:执行动画的目标
speed:执行动画的速度
callback:回调函数
*/
function move(obj,attr,target,speed,callback){
//开启新的定时器之前关闭旧的定时器
clearInterval(obj.timer);
//获取box1原来的left值
var current=parseInt(getStyle(obj,attr));
//判断该往哪边跑
if(current>target){
speed=-speed;
}
//开启定时器
obj.timer=setInterval(function(){
//获取box1原来的left值
var oldValue=parseInt(getStyle(obj,attr));
//在旧值的基础上增加
var newValue=oldValue+speed;
//判断是否大于给定值
if((speed>0&&newValue>target)||(speed<0&&newValue<target)){
newValue=target;
}
//将新值付给box1
obj.style[attr]=newValue+"px";
//当元素移动到800PX,使其停止运行
if(newValue==target){
//动画执行完毕关闭定时器
clearInterval(obj.timer);
//动画执行完毕,调用回调函数,有才调,没有就不调
callback && callback();
}
},30);
}
//获取对象样式 obj:获取对象 name:想要的样式值
function getStyle(obj,name){
if(window.getComputedStyle){
return getComputedStyle(obj,null)[name];
}else{
return obj.currentStyle[name];
}
}
首先设置页面样式:
HTML代码:
<!-- 创建一个外部div作为大的容器 -->
<div id="outer">
<!-- 创建一个ul,用于放置图片 -->
<ul id="imgList">
<li><img src="img/1.jpg" /></li>
<li><img src="img/2.jpg" /></li>
<li><img src="img/3.jpg" /></li>
<li><img src="img/4.jpg" /></li>
<li><img src="img/5.jpg" /></li>
<li><img src="img/6.jpg" /></li>
<li><img src="img/1.jpg" /></li>
</ul>
<!-- 创建导航按钮 -->
<div id="navDiv">
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
</div>
</div>
CSS样式:
值得注意的是设置导航点居中可以采取以下方法:
首先,将元素的position设置为absolute,这样它就可以相对于其最近的已定位(非static)祖先元素定位。
然后,将left属性设置为50%,将元素的左边缘移动到包含块的中心。
最后,使用transform属性的translate函数向左移动元素自身宽度的50%,这样元素的中心点就会与包含块的中心点对齐
*{
margin: 0;
padding: 0;
}
#outer{
width: 620px;
height: 620px;
margin: 10px auto;
background-color: #5F9EA0;
padding: 10px 0;
position: relative;/* 给子元素开启绝对定位时,最好给父元素开启相对定位 */
/* 裁剪溢出内容 */
overflow:hidden ;
}
#imgList{
list-style: none;
/* width: 4000px; */
position: absolute;/* 给子元素开启绝对定位 */
left: 0px; /* 设置偏移量 */
}
#imgList li{
float: left;
margin:0 10px;
}
/* 导航按钮 */
#navDiv{
position: absolute;
bottom: 5px;
left: 50%;
transform: translate(-50%);
}
#navDiv a{
float: left;
width:20px;
height: 20px;
margin:0 5px;
background-color: red;
opacity: 0.5;/* 设置透明度 */
}
/* 设置鼠标移入的效果 */
#navDiv a:hover{
background-color: #000000;
}
JS代码:
<script type="text/javascript">
window.onload=function(){
var imgList=document.getElementById("imgList");
var imgArr=document.getElementsByTagName("img");
//设置imgList宽度
imgList.style.width=620*imgArr.length+"px";
var index=0;
var allA=document.getElementsByTagName("a");
allA[index].style.backgroundColor="black";
/* 点击超链接切换图片 */
for(var i=0;i<allA.length;i++){
//为每一个超链接添加一个num属性
allA[i].num=i;
allA[i].onclick=function(){
clearInterval(timer);
//获取点击超链接的索引
index=this.num;
/* imgList.style.left=(-620*index)+"px"; */
setA();
//使用简易动画
move(imgList,"left",-620*index,20,function(){
autoChange();
});
};
}
autoChange();
//创建一个方法来设置选中的a
function setA(){
if(index>=imgArr.length-1){
index=0;
imgList.style.left=0;
}
//遍历所有的A,并将背景颜色设置为红色,选中的为黑色
for(var i=0;i<allA.length;i++){
allA[i].style.backgroundColor="";//不能直接写red,会覆盖hover的效果
}
//将选中的设置为黑色
allA[index].style.backgroundColor="black";
};
var timer;
//创建一个函数开启自动切换图片
function autoChange(){
//开启定时器,定时切换图片
timer=setInterval(function(){
//索引自增
index++;
//判断index值
index%=imgArr.length;
move(imgList,"left",-620*index,20,function(){
//修改导航点
setA();
});
},2000);
}
};
</script>
二、类的操作
在之前说过可以通过下面这种方法一次修改样式,但是若想大量修改就非常麻烦
box.style.height=100+"px"
我们就可以使用改变类名的方式直接修改样式
obj.className=“样式名”
叠加两个样式 box.className+=" b2";
几个常用的函数:
/*
定义一个函数象一个元素中添加class属性
参数:
obj:要添加class属性的元素
cn:要添加classmates值
*/
function addClass(obj,cn){
obj.className+=" "+cn;
}
/*
判断元素里面是否有指定的class
*/
function hasClass(obj,cn){
var reg=new RsgExp("\\b"+cn+"\\b");
return reg.test(obj.className);
}
/* 删除指定元素的class属性 */
function removeClass(obj,cn){
var reg=new RsgExp("\\b"+cn+"\\b");
//删除class
obj.className=obj.className.replace(reg,"");
}
/*!!!!! 切换一个类 ,有就删除,没有就添加*/
function toggleClass(obj,cn){
var reg=new RsgExp("\\b"+cn+"\\b");
//判断是否有cn
if(hasClass(obj,cn)){
removeClass(obj,cn);
}else{
addClass(obj,cn);
}
}
三、二级下拉菜单
效果图:
HTML代码:
<div id="my_menu" class="sdmenu">
<div>
<span class="menuSpan">商品分类</span>
<a href="#">日用品</a>
<a href="#">女装</a>
<a href="#">大牌好物</a>
<a href="#">美妆</a>
<a href="#">药品</a>
<a href="#">饰品</a>
</div>
<div class="collapsed">
<span class="menuSpan">用户管理</span>
<a href="#">账号管理</a>
<a href="#">地址管理</a>
<a href="#">好友管理</a>
</div>
<div class="collapsed">
<span class="menuSpan">圈子管理</span>
<a href="#">我的装饰</a>
<a href="#">商品管理</a>
<a href="#">订单管理</a>
</div>
<div class="collapsed">
<span class="menuSpan">设置</span>
<a href="#">账号设置</a>
<a href="#">重置密码</a>
<a href="#">退出登录</a>
</div>
</div>
CSS样式:
注意点:
font-family: Arial, Helvetica, sans-serif;
/* Arial 是首选字体。
Helvetica 是当浏览器不支持 Arial 时的备选字体。
sans-serif 是一个通用字体族,表示在没有找到前面列出的字体时,浏览器可以使用任何无衬线字体。 */
overflow: hidden;
/* hidden 表示如果内容超出了元素的边界,超出部分将被隐藏,不会显示滚动条。
repeat-x 指定了背景图像在水平方向(x轴)上重复,但在垂直方向(y轴)上不重复。这通常用于创建水平条纹效果。
*/
background: url(../img/1.gif) no-repeat right bottom;
/* no-repeat 表示背景图像不会在水平和垂直方向上重复铺满整个元素。
right bottom 指定了背景图像的位置,将其放置在元素的右下角。*/
*{
margin: 0;
padding: 0;
list-style-type: none;
}
a,img{
border: 0;
text-decoration: none;/* 清除文本装饰效果 */
}
body{
font:12px/180% Arial, Helvetica, sans-serif,"华文新魏";
}
/* sdmenu */
div.sdmenu{
width: 150px;
margin: 0 auto;
font-family: Arial, Helvetica, sans-serif;
font-size: 20px;
padding-bottom: 5px;
background: url(../img/1.gif) no-repeat right bottom;
color: #000000;
}
div.sdmenu div{
background-color: #CCCCCC;
overflow: hidden;
}
div.sdmenu div:first-child{
background-color: #CCCCCC;
}
div.sdmenu div.collapsed{
height: 35px;
border:white 1px solid;
}
div.sdmenu div span{
display: block;/* 使span也显示为块级元素 */
height: 35px;
line-height: 35px;
overflow: hidden;
padding: 4px 10px;
font-weight: bold;
color: #F5F5DC;
background-color: #000000;
cursor: pointer;
border-bottom: 1px solid #ddd;
}
div.sdmenu div a{
display: block;
border-bottom: 1px solid #e4e4e4;
padding: 0.3125rem;
color: #576b95;
background-color: #F5F5F5;
}
div.sdmenu div a:hover{
background-color: #576b95;
color: #FFFFFF;
}
JS代码:
<script type="text/javascript">
window.onload=function(){
/*
每一个二级菜单都是一个div
当div具有collapsed这个类时候,就是折叠状态,没有就是展开状态
*/
var menuSpan=document.querySelectorAll(".menuSpan");
var openDiv=menuSpan[0].parentNode;//定义变量保存当前打开的菜单
for(var i=0;i<menuSpan.length;i++){
menuSpan[i].onclick=function(){
//获取当前span的父元素
var parentDiv=this.parentNode;
//切换菜单显示状态
toggleMenu(parentDiv);
//判断openDiv和parentDiv是否一样
if(openDiv!=parentDiv && !hasClass(openDiv,"collapsed")){
//打开新的菜单后,应该关闭之前打开的菜单
toggleMenu(openDiv);
}
//修改openDiv为当前打开的菜单
openDiv=parentDiv;
};
}
/* 切换菜单的显示和折叠状态 */
function toggleMenu(obj){
//切换之前去元素高度
var begin=obj.offsetHeight;
//关闭父元素,切换显示
toggleClass(obj,"collapsed");
//切换后获取一个元素的高度
var end=obj.offsetHeight;
//将元素高度重置为begin
obj.style.height=begin+"px";
//执行过渡
move(obj,"height",end,10,function(){
//动画执行完毕删除内联样式
obj.style.height="";
});
}
};
</script>
四、JSON
JSON(JavaScript Object Notation)
-JS中的对象只有JS认识,其他语言都不认识
-JSON就是一个特殊格式地方字符串,可以被任意i语言识别,并可以转换为任意语言中的对象
-在开发中主要用于数据交互
-JSON和JS对象格式一样,但是JSON字符串中的属性名必须加双引号,其余语法一样
分类:
1、对象{}
2、数组【】
JSON中允许的值:字符串、数值、布尔值、null、对象、数组
将JSON对象转换为字符串
-在JS中提供的工具类JSON,可以将JSON转换为JS对象,也可以将JS对象转换为JSON
-JSON.parse();可以将JSON字符串转换为JS对象并返回
例如:JSON.parse(json);
将JS对象转换为JSON
-JSON。stringify();需要一个JS对象作为参数,返回一个JSON字符串