zoukankan      html  css  js  c++  java
  • JavaScript 入门案例

    四、  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 = "" + 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>
    View Code

    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>
    View Code

    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.wrap>(div.imgBox>ul>li.list$*6>img[src="img/0$.jpg"])+div.lineBar>span*6
         -->
    <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>
    View Code

    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;
        }
    })();
    View Code

    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");
            });
        }
    
    })();
    View Code

    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);
    
    })();
    View Code

    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();
        };
    
    })();
    View Code
    版权声明:本文为博主原创文章,转载请附上原文出处链接
  • 相关阅读:
    android的FATAL EXCEPTION: main错误
    ORA12560: TNS: 协议适配器错误
    BroadcastReceiver应用详解
    using C# 详解
    mysqlproxy0.8版本读写分离测试总结
    Mysql SHOW PROCESSLIST Sending data
    [转载]大型网站运维探讨和心得
    找出并optimization表
    mysql中普通索引和唯一索引的效率对比
    ps aux 中STAT 解释
  • 原文地址:https://www.cnblogs.com/IT-LFP/p/10935124.html
Copyright © 2011-2022 走看看