使用jq实现电商网站‘楼梯效果’的渲染

分享一个关于楼梯效果的练习 :

实现功能的方法:

 

关键在于滑动时获取对应li索引 index() animate()的方法 获取索引时 需要用到scrollTop() outHeight(),offset()方法

和jq的动画效果fadeIn() ,fadeOut()的方法,完成楼梯效果的渲染。

最后的完善:此时楼梯效果点击li滑动到对应楼层是 会有页面会有动画滑动的效果,不够完善。

此时定一个变量flag来监听如果为true 执行侧边列表显示的代码,给侧边li加点击事件时,flag为FALSE

实现页面滚动代码时另其变为true。

  1. 首先获取鼠标滑动的距离,滑动之后获取目标li的对应的索引,给对应的li添加类名 使用animate()方法是页面滚动到对应的li。
  2. 给li添加点击事件,(出去最后一个li)使用animate()
  3. 给最后一个li添加事件 使用animate()页面回到顶部。

实例展示

css样式 

<style type="text/css">

        body,

        ul,

        li {

            padding: 0;

            margin: 0;

        }

 

        li {

            list-style: none;

        }

 

        #floorNav {

            /* display: none; */

            position: fixed;

            top: 100px;

            left: 50px;

            width: 32px;

            border: 1px solid #CECECE;

        }

 

        #floorNav li {

            position: relative;

            width: 32px;

            height: 32px;

            border-bottom: 1px solid #CECECE;

            text-align: center;

            line-height: 32px;

            font-size: 12px;

        }

 

        #floorNav span {

            display: none;

            position: absolute;

            top: 0;

            left: 0;

            width: 32px;

            height: 32px;

            background: red;

            color: white;

        }

 

        #floorNav li:hover span,

        #floorNav li.hover span {

            display: block;

        }

 

        #floorNav li:last-child {

            background: red;

            color: white;

            border-bottom: none;

        }

 

        #header,

        #footer {

            width: 1000px;

            height: 1000px;

            background: darkgoldenrod;

            margin: 0 auto;

        }

 

        #content {}

 

        #content li {

            width: 1000px;

            height: 600px;

            margin: 0 auto;

            font-size: 40px;

            text-align: center;

            line-height: 600px;

        }

    </style>

<body>

    <div id="floorNav">

        <ul>

            <li>1F<span>服饰</span></li>

            <li>2F<span>美妆</span></li>

            <li>3F<span>手机</span></li>

            <li>4F<span>家电</span></li>

            <li>5F<span>数码</span></li>

            <li>6F<span>运动</span></li>

            <li>7F<span>居家</span></li>

            <li>8F<span>母婴</span></li>

            <li>9F<span>食品</span></li>

            <li>10F<span>图书</span></li>

            <li>11F<span>服务</span></li>

            <li>TOP</li>

        </ul>

    </div>

    <div id="header"></div>

    <div id="content">

        <ul>

            <li style="background: #8B0000;">服饰</li>

            <li style="background: #123;">美妆</li>

            <li style="background: #667;">手机</li>

            <li style="background: #558;">家电</li>

            <li style="background: #900;">数码</li>

            <li style="background: #456;">运动</li>

            <li style="background: #789;">居家</li>

            <li style="background: #234;">母婴</li>

            <li style="background: #567;">食品</li>

            <li style="background: #887;">图书</li>

            <li style="background: #980;">服务</li>

        </ul>

    </div>

    <div id="footer"></div>

    <script>

        $(function () {

            var flag = true;

            $(window).scroll(function () {

                if (flag) {

                    var st = $(this).scrollTop();//鼠标滑动距离

                   //滑动距离大于300 显示侧边列表

                    if (st > 300) {

                        $("#floorNav").fadeIn();

                    } else {

                        $("#floorNav").fadeOut();

                    }

                       //遍历li 滑动距离大于li 获取匹配元素在当前视口的相对偏移高度-获取第一个匹配元素外部高度(默认包括补白和                  //边框)的一半。取得该元素的索引.

                    $("#content li").each(function () {

                        if (st >= $(this).offset().top - $(this).outerHeight() / 2) {

                            var index = $(this).index();

                     //获取该元素的索引并添加类名,其他兄弟元素移出类名

                            $("#floorNav li").eq(index).addClass("hover").siblings().removeClass("hover");

                        }

                    })

 

                }

            })

           //排除最后一个li 添加点击事件 先获取索引 添加类名移出兄弟元素类名 

            $("#floorNav li:not(:last)").click(function () {

                flag = false;

                var index = $(this).index();

                $(this).addClass("hover").siblings().removeClass("hover");

              //页面滚动到对应li标签对应位置 

                $("body,html").animate({ "scrollTop": $("#content li").eq(index).offset().top }, 200, function () {

                    flag = true;

                });

            });

                //给侧边列表最后一个li  添加点击事件 页面滚动到最上面

            $("#floorNav li:last").click(function () {

                $("body,html").animate({ "scrollTop": 0 }, 200);

 

            })

        })

    </script>

</body>

 

以下是使用jQuery实现简单的拼图效果的示例代码: HTML代码: ```html <div id="puzzle"> <div class="piece" id="piece1"></div> <div class="piece" id="piece2"></div> <div class="piece" id="piece3"></div> <div class="piece" id="piece4"></div> <div class="piece" id="piece5"></div> <div class="piece" id="piece6"></div> <div class="piece" id="piece7"></div> <div class="piece" id="piece8"></div> <div class="piece" id="piece9"></div> </div> ``` CSS代码: ```css #puzzle { width: 300px; height: 300px; border: 1px solid #000; position: relative; } .piece { width: 100px; height: 100px; border: 1px solid #000; background-image: url('path/to/image.jpg'); background-size: 300px 300px; position: absolute; } #piece1 { top: 0; left: 0; } #piece2 { top: 0; left: 100px; } #piece3 { top: 0; left: 200px; } #piece4 { top: 100px; left: 0; } #piece5 { top: 100px; left: 100px; } #piece6 { top: 100px; left: 200px; } #piece7 { top: 200px; left: 0; } #piece8 { top: 200px; left: 100px; } #piece9 { top: 200px; left: 200px; } ``` jQuery代码: ```javascript $(document).ready(function() { var emptyPiece = $('#piece9'); // 空白拼图块 var pieces = $('.piece'); // 所有的拼图块 // 随机打乱拼图块的位置 pieces.sort(function() { return Math.random() - 0.5; }); // 设置每个拼图块的位置 pieces.each(function(index) { var piece = $(this); var top = Math.floor(index / 3) * 100; var left = (index % 3) * 100; piece.css({ top: top + 'px', left: left + 'px' }); // 点击拼图块时进行交换 piece.click(function() { var currentTop = parseInt(piece.css('top')); var currentLeft = parseInt(piece.css('left')); // 判断是否与空白拼图块相邻 if ((currentTop === emptyPiece.position().top && Math.abs(currentLeft - emptyPiece.position().left) === 100) || (currentLeft === emptyPiece.position().left && Math.abs(currentTop - emptyPiece.position().top) === 100)) { var tempTop = piece.css('top'); var tempLeft = piece.css('left'); piece.css({ top: emptyPiece.css('top'), left: emptyPiece.css('left') }); emptyPiece.css({ top: tempTop, left: tempLeft }); } }); }); }); ``` 在上面的示例代码,我们首先定义了一个包含9个拼图块的容器,并使用CSS设置了每个拼图块的位置。然后在jQuery代码,我们将所有的拼图块随机打乱位置,并为每个拼图块绑定了一个点击事件,在点击拼图块时进行交换。交换拼图块时,我们使用jQuery的css()方法来修改每个拼图块的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值