四、 JavaScript 入门案例
在看本节之前,笔者建议您先看 JavaScript 基础篇 https://www.cnblogs.com/IT-LFP/p/10945884.html
1. 瀑布流

DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>布局-瀑布流title>
<link rel="stylesheet" href="css/layout.css" />
<script src="js/layout.js">script>
head>
<body>
<div id="container">
<div class="box">
<div class="box_img">
<a href="img/1.jpg"><img src="img/1.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/2.jpg"><img src="img/2.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/3.jpg"><img src="img/3.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/4.jpg"><img src="img/4.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/5.jpg"><img src="img/5.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/6.jpg"><img src="img/6.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/7.jpg"><img src="img/7.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/8.jpg"><img src="img/8.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/9.jpg"><img src="img/9.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/10.jpg"><img src="img/10.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/11.jpg"><img src="img/11.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/12.jpg"><img src="img/12.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/13.jpg"><img src="img/13.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/14.jpg"><img src="img/14.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/15.jpg"><img src="img/15.jpg" alt="" >a>
div>
div>
<div class="box">
<div class="box_img">
<a href="img/6.jpg"><img src="img/16.jpg" alt="" >a>
div>
div>
div>
body>
<script>
window.onload = function () {
imgLocation("container", "box");
var imgData = {
"data": [
{"src": "2.jpg"}, {"src": "4.jpg"}, {"src": "6.jpg"}, {"src": "8.jpg"}, {"src": "10.jpg"}, {"src": "12.jpg"}, {"src": "14.jpg"}, {"src": "16.jpg"},
{"src": "1.jpg"}, {"src": "3.jpg"}, {"src": "5.jpg"}, {"src": "7.jpg"}, {"src": "9.jpg"}, {"src": "11.jpg"}, {"src": "13.jpg"}, {"src": "15.jpg"}
]
};
window.onscroll = function () {
if (checkFlag()) {
var cparent = document.getElementById("container");
for (var i in imgData.data) {//添加图片节点
//console.log(i);
var ccontent = document.createElement("div");
ccontent.className = "box";
cparent.appendChild(ccontent);
var boximg = document.createElement("div");
boximg.className = "box_img";
ccontent.appendChild(boximg);
var aimg = document.createElement("a");
aimg.href = "img/" + imgData.data[i].src;
boximg.appendChild(aimg);
var img = document.createElement("img");
img.src = "img/" + imgData.data[i].src;
aimg.appendChild(img);
}
imgLocation("container", "box");
}
}
};
function checkFlag() {
var cparent = document.getElementById("container");
var ccontent = getChildrenElement(cparent, "box");
var lastContentHeight = ccontent[ccontent.length - 1].offsetTop;
var scrolltop = document.documentElement.scrollTop || document.body.scrollTop;
var pageHeight = document.documentElement.clientHeight || document.body.clientHeight;
//console.log(lastContentHeight + ":" + scrolltop + ":" + pageHeight);
if (lastContentHeight < scrolltop + pageHeight)
return true;
}
//将content储存在数组中
function getChildrenElement(parent, content) {
var contentArr = [];
var contentAll = parent.getElementsByClassName(content);
//console.log(contentAll.length);
for (var i = 0; i < contentAll.length; i++) {//为什么这里不能用var i in contentAll
contentArr.push(contentAll[i]);
}
return contentArr;
}
//将parent下所有的content取出
function imgLocation(parent, content) {
var cparent = document.getElementById(parent);
var ccontent = getChildrenElement(cparent, content);
var imgWidth = ccontent[0].offsetWidth;
var cols = Math.floor(document.documentElement.clientWidth / imgWidth);
//console.log(cols);
cparent.style.cssText = "width:" + imgWidth * cols + "px;margin:0 auto";
//获取衔接点
var boxHeightArr = [];
for (var i in ccontent) {
if (i < cols) {
boxHeightArr[i] = ccontent[i].offsetHeight;
//console.log(boxHeightArr[i]);
} else {
var minHeight = Math.min.apply(null, boxHeightArr);
//console.log(minHeight);
var minIndex = getMinIndex(boxHeightArr, minHeight);
ccontent[i].style.position = "absolute";
ccontent[i].style.top = minHeight + "px";
ccontent[i].style.left = ccontent[minIndex].offsetLeft + "px";
boxHeightArr[minIndex] += ccontent[i].offsetHeight;
}
}
}
function getMinIndex(boxHeightArr, minHeight) {
for (var i in boxHeightArr)
if (boxHeightArr[i] == minHeight)
return i;
return -1;
}
script>
html>
2. 3D翻页

DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3D翻页轮播title>
<style>
* {
padding: 0;
margin: 0;
}
body {
background: url("img/0.jpg") no-repeat center/100%;
/*overflow: hidden;*/
}
.wrap {
position: relative;
width: 1000px;
height: 612px;
margin: 100px auto;
background: url("img/0.jpg") no-repeat 100%;
perspective: 6000px; /*3d景深*/
box-shadow: 0 0 18px pink;
}
.left, .right {
position: absolute;
right: 0;
top: 0;
width: 50%;
height: 100%;
}
.left {
transform: rotateY(0deg);
transform-origin: left;
transform-style: preserve-3d; /*3d属性*/
z-index: 1;
}
.on {
transform: rotateY(-180deg);
transition: transform 1.5s ease-in-out;
}
.right {
background: url("img/1.jpg") no-repeat right top 50%;
}
.prev, .next {
position: absolute;
width: 100%;
height: 100%;
}
.prev {
background: url("img/0.jpg") no-repeat right top 50%;
}
.next {
background: url("img/1.jpg") no-repeat left top 50%;
transform: translateZ(-1px) scale(-1, 1); /*scale(x,y)负值可以达到镜像,translateZ(-1px)改变层次*/
}
style>
head>
<body>
<div class="wrap">
<div class="left">
<div class="prev">div>
<div class="next">div>
div>
<div class="right">div>
div>
body>
<script>
/**
* 防止全局变量污染
*/
(function () {
var oLeft = document.querySelector(".left");//获取元素querySelector(".left");
var oPrevImg = document.querySelector(".prev"),
oNextImg = document.querySelector(".next"),
oWrapImg = document.querySelector(".wrap"),
oRightImg = document.querySelector(".right"),
oBodyImg = document.querySelector("body");
var index = 0,//当前第几张图
isClick = false;//多次点击的开关
function change() {
if (isClick) return;
isClick = true;
index++;
index %= 4;
oLeft.classList.add("on");//添加类名,可维护性
document.addEventListener("transitionend", function () {//transitionend
oLeft.classList.remove("on");
oBodyImg.style.backgroundImage =
oPrevImg.style.backgroundImage =
oWrapImg.style.backgroundImage = "url('img/" + index + ".jpg')";
oNextImg.style.backgroundImage =
oRightImg.style.backgroundImage = "url('img/" + (index + 1) % 4 + ".jpg')";
isClick = false;
});
}
document.onclick = function () {
change();
}
}
)();
script>
html>
3. 网易轮播图

DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网易轮播图title>
<style>
* {
margin: 0;
padding: 0;
}
.wrap {
width: 1200px;
height: 367px;
margin: 80px auto;
}
.wrap .imgBox ul {
position: relative;
width: 1200px;
height: 336px;
overflow: hidden;
}
.wrap .imgBox ul li {
position: absolute;
list-style: none;
width: 730px;
height: 336px;
transition: transform .2s ease;
}
.wrap .imgBox ul .list1 {
z-index: 1;
transform: scale(0.81);
transform-origin: 0 100%;
}
.wrap .imgBox ul .list2 {
z-index: 2;
transform: translateX(235px);
}
.wrap .imgBox ul .list3 {
z-index: 1;
transform: translateX(730px) scale(0.81);
transform-origin: 100% 100%;
}
.wrap .imgBox ul .list4 {
transform: translateX(965px) scale(0.81);
transform-origin: 100% 100%;
}
.wrap .imgBox ul .list5 {
transform: translateX(1200px) scale(0.81);
transform-origin: 100% 100%;
}
.wrap .imgBox ul .list6 {
transform: translateX(1435px) scale(0.81);
transform-origin: 100% 100%;
}
.wrap .imgBox ul li img {
width: 730px;
height: 336px;
}
.wrap .lineBar {
width: 1200px;
height: 31px;
text-align: center;
}
.wrap .lineBar span {
display: inline-block;
width: 35px;
height: 3px;
margin-left: 4px;
background-color: #cccccc;
}
style>
head>
<body>
<div class="wrap">
<div class="imgBox">
<ul>
<li class="list1"><img src="img/01.jpg" alt="">li>
<li class="list2"><img src="img/02.jpg" alt="">li>
<li class="list3"><img src="img/03.jpg" alt="">li>
<li class="list4"><img src="img/04.jpg" alt="">li>
<li class="list5"><img src="img/05.jpg" alt="">li>
<li class="list6"><img src="img/06.jpg" alt="">li>
ul>
div>
<div class="lineBar"><span>span><span>span><span>span><span>span><span>span><span>span>div>
div>
body>
<script>
(function () {
var listArray = document.querySelectorAll(".wrap .imgBox ul li"),
lineBar = document.querySelectorAll(" .wrap .lineBar span"),
oImgBox = document.querySelector(".wrap .imgBox"),
oName = [],
index = 0,
listLength = listArray.length;
for (var item of listArray) {
oName.push(item.className);
}
function nextPic() {//把最后一个放到第一个位置
oName.unshift(oName[5]);
oName.pop();
for (var i = 0; i < listLength; i++)
listArray[i].className = oName[i];
index++;
index %=6;
changeColor();
}
function prePic() {//把第一个放到最后一个位置
oName.push(oName[0]);
oName.shift();
for (var i = 0; i < listLength; i++)
listArray[i].className = oName[i];
index--;
if (index<0) index=5;
changeColor();
}
function changeColor() {
for (var i = 0; i < listLength; i++) {
if (i == index)
lineBar[index].style.backgroundColor = "green";
else
lineBar[i].style.backgroundColor = "#cccccc";
}
}
changeColor();
var eleSel = ["list1", "list3"];
var eleAct = ["prePic", "nextPic"];
oImgBox.addEventListener("click", function (e) {
var e = e || window.event;
var ele = e.target.parentNode.getAttribute("class");
if (ele == "list3") nextPic();
if (ele == "list1") prePic();
//window[eleAct[eleSel.indexOf(ele)]]();
});
})();
script>
html>
4. 京东轮播图

//京东轮播图 (function () { var oLefter = document.querySelector(".j-content .content-wrap01 .content02 .lefter"); var oRighter = document.querySelector(".j-content .content-wrap01 .content02 .righter"); var oImages = document.querySelectorAll(".j-content .content-wrap01 .content02 .banner-img a"); var oCircle = document.querySelectorAll(".j-content .content-wrap01 .content02 .circle span"); var oBanner = document.querySelector(".j-content .content-wrap01 .content02"); var index = 0; var lastIndex = 0; var timer = 0;//定时器的返回值是number类型 //方向点击切换 oLefter.onclick = function () { change(function () { index--; if (index < 0) index = oImages.length - 1; }); }; oRighter.onclick = function () { rightChange(); }; function rightChange() { change(function () { index++; index %= oImages.length; }); } //鼠标移动到圆的切换 for (var i = 0; i < oCircle.length; i++) { oCircle[i].index = i;//在每个圆中自定义一个index属性,核心点 oCircle[i].onmouseover = function (e) { change(function () { index = e.currentTarget.index;//核心点,想想为什么不能用this.index }); } } //自动轮播 function auto() { timer = setInterval(function () { rightChange(); // console.log(index); }, 3000); } auto(); //鼠标进入轮播图清除定时时间 oBanner.onmouseenter = function () { clearInterval(timer); }; //鼠标移出自动轮播 oBanner.onmouseout = function () { clearInterval(timer);//清除重复的定时器,修复bug auto(); }; //change函数 function change(callback) { //prev oImages[lastIndex].classList.remove("banner-on");//className = ''; oCircle[lastIndex].classList.remove("circle-on"); //index变化 callback && callback();//防止报错 //next oImages[index].classList.add("banner-on");//className="banner-on"; oCircle[index].classList.add("circle-on"); //lastIndex变化 lastIndex = index; } })();
5. 京东公告栏和线条跟随

(function () { var oLine = document.querySelector(".j-content .content-wrap01 .content04 .item .li-2 .line"), oPromotion = document.querySelector(".j-content .content-wrap01 .content04 .item .li-2 .a2-1"), oNotice = document.querySelector(".j-content .content-wrap01 .content04 .item .li-2 .a2-2"); var promote = document.querySelector(".j-content .content-wrap01 .content04 .item .li-2 .promotion"), note = document.querySelector(".j-content .content-wrap01 .content04 .item .li-2 .notice"); //促销栏和下划线的显示 oPromotion.onmouseenter = function () { oLine.classList.remove("line-on"); oLine.addEventListener("transitionend", function () { note.classList.add("text-none"); promote.classList.remove("text-none"); }); }; //公告栏和下划线的显示 oNotice.onmouseenter = function () { oLine.classList.add("line-on"); oLine.addEventListener("transitionend", function () { promote.classList.add("text-none"); note.classList.remove("text-none"); }); } })();
6. 京东秒杀

/*京东秒杀*/ (function () { var timeData = {//获取时间数据 oHours: document.querySelector(".j-content .content-wrap02 .flashDeals a ul .flashTimer .hours"), oMinimums: document.querySelector(".j-content .content-wrap02 .flashDeals a ul .flashTimer .minimums"), oSeconds: document.querySelector(".j-content .content-wrap02 .flashDeals a ul .flashTimer .seconds"), }; //计时器 function timer(time) { if (Number(time.oSeconds.innerHTML) > 0) { change(time.oSeconds); } else { if (Number(time.oMinimums.innerHTML) > 0) { change(time.oMinimums); time.oSeconds.innerHTML = 59; } else { if (Number(time.oHours.innerHTML) > 0) { change(time.oHours); time.oMinimums.innerHTML = 59; time.oSeconds.innerHTML = 59 } else { clearInterval(); } } } } //计时变化 function change(data) { var count = Number(data.innerHTML); // console.log(typeof data.innerHTML); count--; if (count < 10) data.innerHTML = "0" + count; else data.innerHTML = count; } //定时 setInterval(function () { timer(timeData); }, 1000); })();
7. 京东搜索框热词推荐

/*热词变化*/ (function () { var data01 = ["海尔空调", "烧烤炉", "奶瓶消毒器", "挂烫机", "云南白药牙膏", "U盘16G", "魅族手机", "油烟机"]; var data02 = ["1元享800M", "家电清凉节", "建材3件8折", "巴味渝珍李"]; var length01 = data01.length, index01 = 0, length02 = data02.length, index02 = 0, timer02 = 0; var oPlaceholder = document.querySelector(".search-wrap .search-box .searcher .searchText"), oHotWords = document.querySelector(".search-wrap .search-hotWords .a-1"); var flag = false; //placeholder的热词切换 setInterval(function () { if (!flag) { index01++; index01 %= length01; oPlaceholder.setAttribute("placeholder", data01[index01]); } }, 5000); //搜索框获取和失去焦点时,placeholder的热词消失和出现 oPlaceholder.onfocus = function () { flag = true; oPlaceholder.setAttribute("placeholder", ""); }; oPlaceholder.onblur = function () { flag = false; oPlaceholder.setAttribute("placeholder", data01[index01]); }; //推荐热词的切换函数 function auto() { timer02 = setInterval(function () { index02++; index02 %= length02; oHotWords.innerHTML = data02[index02]; }, 3000); } auto(); //鼠标移入后,推荐热词停止切换 oHotWords.onmouseenter = function () { clearInterval(timer02); }; //鼠标移出后,推荐热词继续切换 oHotWords.onmouseout = function () { clearInterval(timer02); auto(); }; })();