博主信息
博文 18
粉丝 0
评论 0
访问量 15587
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
懒加载和选项卡-0715
XXXX.的博客
原创
1064人浏览过
  1. 懒加载的关键在于:

    (1).当图片进入可视区域,图片显示出来。图片顶部的高度小于等于可视区高度与可视区滚动距离之和时,说明已进入可视区。

        (2.)创建文档片段,把图片添加到文档片段中,。这样因为是在内存中操作, 不会引起页面抖动,也不会触发大量的DOM操作

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>懒加载</title>
</head>
<body style="">
<script>
    var container = document.createElement('div');
    var frag = document.createDocumentFragment();
    for (var i=13; i<= 27; i++){
     var imgUrl = 'images/'+ i +'.jpg';
     var img = document.createElement('img');
     img.setAttribute('src','images/loading.gif');
     img.setAttribute('data-src',imgUrl);
     img.setAttribute('style','width:500px;height:500px;margin:5px');
     frag.appendChild(img);
    }
    container.appendChild(frag);
    document.body.insertBefore(container,document.body.firstElementChild);
    window.addEventListener('scroll',lazyLoaded,false);
    function lazyLoaded() {
var scrollTop = document.documentElement.scrollTop;
var clientHeight = document.documentElement.clientHeight;
var imgArr = Array.prototype.slice.call(document.images,0);
imgArr.forEach(function (img) {
    if (img.offsetTop <= (scrollTop + clientHeight)){
        img.setAttribute('src',img.dataset.src);
    }

})
    }
    window.addEventListener('load', lazyLoaded, false);
</script>
</body>
</html>

运行实例 »

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

P}3%PJ$E@RY~HWX5AJUG6[H.png

2.选项卡最关键的点在于:

(1).导航与详情页的一一对应,这里运用自定义属性使两者一一对应。

(2).当前被点击的导航自动设置为激活状态,之前的导航的状态被清除。


实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选项卡</title>
    <style>
        ul,li {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        a {
            text-decoration: none;
        }
        a:hover {
            text-decoration-color: red;
            text-decoration-line: underline;
        }
        .tab-container {
            width: 300px;
            height: 200px;
        }

        .tab-nav {
            overflow: hidden;
        }

        .tab-nav ul li {
            float: left;
            width: 100px;
            height: 30px;
            line-height: 30px;
            text-align: center;
            cursor: pointer;
        }

        .active {
            background-color: plum;
        }

        .tab-content .detail{
            line-height: 30px;
            min-height: 200px;
            padding-top: 10px;
            display: none;
        }

        .detail.active {
            display: block;
        }
    </style>
</head>
<body>
<div  class="tab-container">
    <div class="tab-nav">
        <ul>
            <li class="active" data-index="1">电视剧</li>
            <li class="active" data-index="2">综艺</li>
            <li class="active" data-index="3">电影</li>
        </ul>
    </div>
    <div class="tab-content">
        <div class="detail active" data-index="1">
            <ul>
                <li><a href="">长安十二时辰</a></li>
                <li><a href="">微微一笑很倾城</a></li>
                <li><a href="">流淌的美好时光</a></li>
            </ul>
        </div>

        <div class="detail " data-index="2">
            <ul>
                <li><a href="">这就是街舞</a></li>
                <li><a href="">王牌对王牌</a></li>
                <li><a href="">奔跑吧</a></li>
            </ul>
        </div>

        <div class="detail " data-index="3">
            <ul>
                <li><a href="">流浪地球</a></li>
                <li><a href="">夏目友人帐</a></li>
                <li><a href="">大鱼海棠</a></li>
            </ul>
        </div>
    </div>
</div>
<script>
    var tabNav = document.getElementsByClassName('tab-nav').item(0);
    var tabList = tabNav.firstElementChild.children;
    var tabArr = Array.prototype.slice.call(tabList, 0);

    var detail = document.getElementsByClassName('detail');
    var detailArr = Array.prototype.slice.call(detail,0);

    tabNav.addEventListener('click',showDetail,false);
    function showDetail(ev) {
        tabArr.forEach(function (tab) {tab.classList.remove('active');
        ev.target.classList.add('active');
            detailArr.forEach(function (detail) {detail.classList.remove('active')});
            detailArr.forEach(function (detail) {
                if (detail.dataset.index === ev.target.dataset.index) {
                    detail.classList.add('active');
                }
            });

        })
    }
    // tabNav.addEventListener('mouseover', showDetail, false);
</script>
</body>
</html>

运行实例 »

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

      运行如下图所示:`D{0GE@N37BD_6}6RJ6$}OC.png

批改状态:合格

老师批语:对于懒加载, 重点在于理解原理,步骤, 选项卡要理解导航与详情之间的对应关系是如何体现的
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学