1. 轮播图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>大秦帝国</title>
<link rel="shortcut icon" href="./imgs/kirlant.ico">
<link rel="stylesheet" href="./baseCSS/reset.css">
<link rel="stylesheet" href="./css/all.css">
<link rel="stylesheet" href="./learn.css">
</head>
<body id="body">
<div id="outer">
<ul id="imgList">
<li><img src="./imgs/bf_3.jpg"></li>
<li><img src="./imgs/ssm_3.jpg"></li>
<li><img src="./imgs/xh_3.jpg"></li>
<li><img src="./imgs/bf_3.jpg"></li>
</ul>
<div id="navDiv">
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
</div>
</div>
<script type="text/javascript" src="./learn.js"></script>
</body>
</html>
@imgEdge: 253px;
@blankEdge: 10px;
body {
// 图片大小 253 × 253
#outer{
width: @imgEdge + @blankEdge*2;
height: @imgEdge;
margin: 50px auto;
padding: @blankEdge 0;
background-color: aliceblue;
position: relative;
overflow: hidden;
#imgList{
list-style: none;
position: absolute;
left: 0;
li{
float: left;
margin: 0 @blankEdge;
}
}
#navDiv{
position: absolute;
bottom: 15px;
transition-duration: 1s;
a{
float: left;
width: @blankEdge;
height: @blankEdge;
background-color: rgb(151, 187, 241);
margin: 0 2px;
// 透明
opacity: 0.7;
}
a:hover{
background-color: rgb(33, 57, 95);
}
}
}
}
var divOuter = document.getElementById("outer");
var ulList = document.getElementById("imgList");
var imgs = document.getElementsByTagName("img");
var navBar = document.getElementById("navDiv");
var navBlock = document.getElementsByTagName("a");
var imgListWidth = 273 * imgs.length;
ulList.style.width = imgListWidth + "px";
navBar.style.left = (273 - 14*navBlock.length)/2 + "px";
var index = 0;
navBlock[index].style.backgroundColor = "#21395f";
var timerAuto;
for(var i=0; i<navBlock.length; ++i){
navBlock[i].idx = i;
navBlock[i].onclick = function(){
clearInterval(timerAuto);
index = this.idx;
move(ulList, 20, -273*index, "left", 20, function(){
setNavBlockColor();
autoChange();
});
}
}
autoChange();
function getStyle(obj, name){
if(window.getComputedStyle){
return getComputedStyle(obj, null)[name];
}else{
return obj.currentStyle[name];
}
};
function move(obj, speed, target, dir, t, callback=function(){}){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var oldPos = parseInt(getStyle(obj, dir));
var useSpeed;
if(target < oldPos){
useSpeed = -speed;
}else{
useSpeed = speed;
}
var newPos = oldPos + useSpeed;
if((useSpeed>0 && newPos >= target)||(useSpeed<0 && newPos <= target)){
newPos = target;
}
obj.style[dir] = newPos + "px";
if(newPos == target){
clearInterval(obj.timer);
callback();
}
},t);
};
function setNavBlockColor(){
if(index == navBlock.length){
index = 0;
ulList.style.left = 0;
}
for(var i=0; i<navBlock.length; ++i){
navBlock[i].style.backgroundColor = "";
}
navBlock[index].style.backgroundColor = "#21395f";
};
function autoChange(){
timerAuto = setInterval(function(){
++index;
index %= imgs.length;
move(ulList, 20, -273*index, "left", 20, function(){setNavBlockColor();});
}, 3000);
};
2. 二级菜单

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>大秦帝国</title>
<link rel="shortcut icon" href="./imgs/kirlant.ico">
<link rel="stylesheet" href="./baseCSS/reset.css">
<link rel="stylesheet" href="./css/all.css">
<link rel="stylesheet" href="./learn.css">
</head>
<body>
<div class="sdmenu" id="my_menu">
<div class="collapsed">
<span class="menuSpan">在线工具</span>
<a href="#">图像优化</a>
<a href="#">收藏夹图标生成器</a>
<a href="#">邮件</a>
<a href="#">htaccess密码</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="#">JavaScript工具包</a>
<a href="#">CSS驱动</a>
<a href="#">CodingForms</a>
<a href="#">CSS例子</a>
</div>
</div>
<script type="text/javascript" src="./yytTools.js"></script>
<script type="text/javascript" src="./learn.js"></script>
</body>
</html>
var menuSpan = document.querySelectorAll(".menuSpan");
var nums = menuSpan.length;
var openSpan = menuSpan[0];
toggleClass(openSpan.parentNode, "collapsed");
toggleClass(openSpan, "menuSpan");
for(var i=0; i<menuSpan.length; ++i){
menuSpan[i].onclick = function(){
toggleMenu(this, 10, "height", 20);
if(openSpan != this && !hasClass(openSpan.parentNode, "collapsed")){
toggleMenu(openSpan, 10, "height", 20);
}
openSpan = this;
}
}
function toggleMenu(obj, speed, dir, t){
var parentDiv = obj.parentNode;
var begin = parentDiv.offsetHeight;
toggleClass(parentDiv, "collapsed");
toggleClass(obj, "menuSpan");
var end = parentDiv.offsetHeight;
parentDiv.style.height = begin+"px";
move(parentDiv, speed, end, dir, t, function(){
parentDiv.style.height = "";
});
}
body {
font-size: 18px;
.sdmenu{
width: 260px;
display: flex;
flex-wrap: wrap;
margin: 10px auto;
div{
width: 100%;
overflow: hidden;
display: flex;
flex-wrap: wrap;
span{
display: block;
width: 100%;
padding: 10px;
color: rgb(221, 230, 246);
background-color: rgb(61, 88, 125);
border: 1px solid rgb(61, 88, 125);
}
span::before{
content: '\f0d7'; // \f0da
font-family: "Font Awesome 6 Free";
font-weight: 900;
margin-right: 10px;
}
a{
width: 100%;
height: 16px;
color: rgb(46, 72, 109);
background-color: rgb(205, 215, 230);
padding: 10px;
border: 1px solid rgb(174, 192, 210);
display: flex;
justify-content: space-between;
}
a::after{
content: '\f101';
font-family: "Font Awesome 6 Free";
color: rgb(205, 215, 230);
font-weight: 900;
}
a:hover{
color: rgb(221, 230, 246);
background-color: rgb(132, 158, 198);
}
}
}
}
.collapsed{
height: 40px;
.menuSpan::before{
content: '\f0da'; // \f0d7
font-family: "Font Awesome 6 Free";
font-weight: 900;
margin-right: 10px;
}
}
yytTools.js
function getStyle(obj, name){
if(window.getComputedStyle){
return getComputedStyle(obj, null)[name];
}else{
return obj.currentStyle[name];
}
};
function move(obj, speed, target, dir, t, callback=function(){}){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var oldPos = parseInt(getStyle(obj, dir));
var useSpeed;
if(target < oldPos){
useSpeed = -speed;
}else{
useSpeed = speed;
}
var newPos = oldPos + useSpeed;
if((useSpeed > 0 && newPos > target)||(useSpeed < 0 && newPos < target)){
newPos = target;
}
obj.style[dir] = newPos+"px";
if(newPos == target){
clearInterval(obj.timer);
callback();
}
},t);
};
function addClass(obj, cn){
obj.className += " "+cn;
}
function hasClass(obj, cn){
var reg = new RegExp("\\b"+cn+"\\b");
if(reg.test(obj.className)){
return true;
}else{
return false;
}
}
function removeClass(obj, cn){
var reg = new RegExp("\\b"+cn+"\\b");
obj.className = obj.className.replace(reg, "");
}
function toggleClass(obj, cn){
if(hasClass(obj, cn)){
removeClass(obj, cn);
}else{
addClass(obj, cn);
}
}