Blogger Information
Blog 8
fans 1
comment 0
visits 6436
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
懒加载与选项卡 - 7月15日作业
大兔子的博客
Original
1546 people have browsed it

懒加载的实现:

我修改了一些内容更符合一下我做的项目中的实际需求:

只获取含有自定义属性data-src的img标签

var imgarr = Array.prototype.slice.call(document.querySelectorAll('[data-src]'), 0);
            console.log(imgarr);

图片是从国外网站调用的,加载比较慢,对演示效果会有一点影响

实例

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta name="robots" content="nofollow">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=yes">
    <title>图片懒加载</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            border: none;
        }

        .con {
            max-width: 500px;
            margin: 0 auto;
            background-color: #eee;
            overflow: hidden;
        }

            .con img {
                max-width : 100%;
                height: auto;
                display: block;
                margin: 20px auto;
            }
    </style>
</head>
<body>
    <div class="con">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?program">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?document">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?book,library">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?github">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?cartoon">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?beauty">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?daily">
        <img src="https://blog.datuzi.top/template/datuzi/img/bg.jpg">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?yes">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?hello">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?rg">
        <img src="https://blog.datuzi.top/static/upload/image/20190629/1561800927937351.jpg" data-src="https://source.unsplash.com/500x500/?no">
    </div>

    <script>
        //  监听页面滚动时间
        window.addEventListener('scroll', Lazyload, false);
        //  懒加载方法
        function Lazyload() {
            //  获取滚动高度
            var scrollTop = document.documentElement.scrollTop;
            //  获取可视区高度
            var clientHeight = document.documentElement.clientHeight;
            //  将所有图片转换为数组
            var imgarr = Array.prototype.slice.call(document.querySelectorAll('[data-src]'), 0);
            console.log(imgarr);
            //  var imgarr = Array.from(document.images);
            imgarr.forEach(function (img) {
                //  判断图片顶部距离小于可视区高度与可视区滚动距离的话,说明该图片已经进入可视区
                if (img.offsetTop <= (scrollTop + clientHeight)) {
                    img.setAttribute('src', img.dataset.src)
                };
            });
        };
        window.addEventListener('load', Lazyload, false);
    </script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例



选项卡:

修改了dom结构,精简掉一个div

实例

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta name="robots" content="nofollow">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=yes">
    <title>TAB选项卡</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            border: none;
        }

        .tab {
            width: 100%;
            max-width: 500px;
            margin: 120px auto;
            overflow: hidden;
        }

            .tab ul {
                list-style: none;
                overflow: hidden;
            }

                .tab ul li {
                    float: left;
                    width: 25%;
                    line-height: 40px;
                    text-align: center;
                    cursor: pointer;
                }

                    .tab ul li.active {
                        background-color: #0094ff;
                        color: #fff;
                    }

        .tab-con {
            overflow: hidden;
        }

            .tab-con .tab-item {
                display: none;
                background-color: #0094ff;
                color: #fff;
                padding: 30px;
                min-height: 300px
            }

                .tab-con .tab-item.active {
                    display: block;
                }
    </style>
</head>
<body>
    <!-- HTML结构 -->
    <div class="tab">
        <ul class="tab-nav">
            <li class="active" data-index="1">选项卡一</li>
            <li data-index="2">选项卡二</li>
            <li data-index="3">选项卡三</li>
            <li data-index="4">选项卡四</li>
        </ul>
        <div class="tab-con">
            <div class="tab-item active" data-index="1">内容一</div>
            <div class="tab-item" data-index="2">内容二</div>
            <div class="tab-item" data-index="3">内容三</div>
            <div class="tab-item" data-index="4">内容四</div>
        </div>
    </div>
    <script>
        // 获取TAB选项卡的ul导航以及所有的li标签,并转换为数组对象
        var tabnav = document.getElementsByClassName("tab-nav").item(0);
        var tablist = tabnav.getElementsByTagName("li");
        var tabarr = Array.prototype.slice.call(tablist, 0);

        // 控制台打印检查是否正确
        console.log(tabnav);
        console.log(tablist);
        console.log(tabarr);

        // 获取TAB选项卡所有的详情内容,并转换为数组对象
        var tabitem = document.getElementsByClassName("tab-item");
        var tabitemarr = Array.prototype.slice.call(tabitem, 0);

        // 控制台打印检查是否正确
        console.log(tabitem);
        console.log(tabitemarr);

        // 利用冒泡事件,进行事件委托
        tabnav.addEventListener('click', showitem, false);

        // 监听TAB选项卡点击事件
        function showitem(ev) {
            // 清空原li标签的样式,并设置被点击的标签页为当前页
            tabarr.forEach(function (tabnav) { tabnav.classList.remove('active') });
            ev.target.classList.add('active');

            // 清空原选项卡详情内容的样式,并根据导航的data-index属性的对应关系,显示对应的详情内容
            tabitemarr.forEach(function (tabitem) { tabitem.classList.remove('active') });
            tabitemarr.forEach(function (tabitem) {

                // 判断当详情内容的data-index与导航标签的data-index相同市,显示改内容
                if (tabitem.dataset.index === ev.target.dataset.index) {
                    tabitem.classList.add('active');
                }
            })
        };
        // 鼠标移入事件 
        tabnav.addEventListener('mouseover', showitem, false);
    </script>
</body>
</html

运行实例 »

点击 "运行实例" 按钮查看在线实例


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post