javascript - 哪位大神指导下,如何实现今日头条头部导航列表,点那个类型,哪种类型就居中了?

查看:68
本文介绍了javascript - 哪位大神指导下,如何实现今日头条头部导航列表,点那个类型,哪种类型就居中了?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题


现在点的科技,科技就在中间,如何点其他其他也跑到中间?

解决方案

<!doctype html>
<head>
    <title>progressbar demo</title>
    <meta charset="utf-8">
    <script src="http://code.jquery.com/jquery-1.12.4.js"></script>
    <style type="text/css">
    .wrapper {
        position: relative;
        width: 100%;
        height: 30px;
        overflow: hidden;
    }

    .nav {
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        height: 30px;
        background: red;
        margin: 0;
        padding: 0;
    }

    .nav li {
        height: 30px;
        float: left;
        list-style: none;
        line-height: 30px;
        padding: 0 40px;
        margin: 0;
        cursor: pointer;
    }
    </style>
</head>
<body>
    <div class="wrapper">
        <ul class="nav">
            <li>第0个</li>
            <li>第1个</li>
            <li>第2个</li>
            <li>第3个</li>
            <li>第4个</li>
            <li>第5个</li>
            <li>第6个</li>
            <li>第7个</li>
            <li>第8个</li>
            <li>第9个</li>
            <li>第10个</li>
            <li>第11个</li>
            <li>第12个</li>
            <li>第13个</li>
            <li>第14个</li>
            <li>第15个</li>
            <li>第16个</li>
            <li>第17个</li>
        </ul>
    </div>
    <script type="text/javascript">
    $(function() {
        var totalWidth = 0;
        var blockWidth = $('.wrapper').width();

        $('.wrapper .nav li').each(function() {
            totalWidth += $(this).outerWidth(true);
        });

        $('.wrapper .nav').width(totalWidth);

        var origin = $('.wrapper .nav li:first-child').position();

        $('.wrapper .nav li').click(function() {
            var position   = $(this).position();
            var outerWidth = $(this).outerWidth(true);
            var offsetX    = position.left - origin.left; // 当前点击元素的相对横向偏移
            var centerX    = offsetX + outerWidth / 2; // 当前点击元素中点相对横坐标

            if(totalWidth <= blockWidth) {
                // 可见区域比ul区域大
                // 不进行任何操作
            } else {
                if(centerX < blockWidth / 2) {
                    // 元素中点左侧距离小于可见区域的一半
                    // 就不能将当前元素滑到中间,否则左侧会空出来
                    // 只能使left为0
                    $('.wrapper .nav').animate({left: 0}, 1000);
                } else if(centerX + blockWidth / 2 > totalWidth) {
                    // 元素中点坐标加上可见区域的一半大于ul总宽度
                    // 就不能将当前元素滑到中间,否则右侧会空出来
                    // 只能使left为blockWidth - totalWidth
                    $('.wrapper .nav').animate({left: blockWidth - totalWidth}, 1000);
                } else {
                    // 正常居中
                    $('.wrapper .nav').animate({left: blockWidth / 2 - centerX}, 1000);
                }
            }
        });
    })
    </script>
</body>
</html>

效果:

这篇关于javascript - 哪位大神指导下,如何实现今日头条头部导航列表,点那个类型,哪种类型就居中了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆