• 运动—图片中心放大


    一、布局

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src='../../package/move.js'></script>
        <style>
            *{
                margin:0;
                padding: 0;
                list-style: none;
            }
            #box{
                position: relative;
                width: 510px;
                margin:60px auto;
            }
    
            #box ul{
                width: 510px;
                overflow: hidden;
            }
    
            #box ul li{
                width: 150px;
                height: 150px;
                float: left;
                margin: 10px;
    
            }
    
            #box ul li img{
                width: 100%;
                height: 100%;
            }
    
        </style>
    
    </head>
    <body>
        <div id="box">
            <ul>
                <li><img src="../img/cat/1.jpg" alt=""></li>
                <li><img src="../img/cat/2.jpg" alt=""></li>
                <li><img src="../img/cat/3.jpg" alt=""></li>
                <li><img src="../img/cat/4.jpg" alt=""></li>
                <li><img src="../img/cat/5.jpg" alt=""></li>
                <li><img src="../img/cat/6.jpg" alt=""></li>
                <li><img src="../img/cat/7.jpg" alt=""></li>
                <li><img src="../img/cat/8.jpg" alt=""></li>
                <li><img src="../img/cat/9.jpg" alt=""></li>
            </ul>
        </div>
    </body>
    </html>

    二、获取操作元素(当前我们需要操作的是li)

    var oBox=document.getElementById('box');
    var oUl=oBox.children[0];
    var aLi=oUl.children;

    三、布局转化

    布局转化原因:当前布局为浮动布局(浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止,浮动脱离了正常的文档流) ,所以如果不进行布局转化,当元素放大之后,他会挤压其他的浮动元素,导致布局会乱,所以我们需要将布局转化为定位布局(绝对定位),因为绝对定位是不占空间的,而且我们可以通过zIndex去设置层级关系,让放大的元素处于其他元素之上

    (1)首先我们需要记录下当前元素的left值,跟top值,因为布局转化之后,元素的位置还是当前的位置

            var aPos=[];  //定义一个数组,用于存放当前每个li的left值跟top值
            for(var i=0;i<aLi.length;i++){
                aPos[i]={
                    left:aLi[i].offsetLeft,  //offsetLeft为元素距离最近的有定位的父级的左边的距离,在此案例中,该父级为oBox,也就是li的left值
                    top:aLi[i].offsetTop
                };
            };

    (2)进行布局转化。for循环每个li,设置li的left,top值,以及定位

    for(var i=0;i<aLi.length;i++){
                aLi[i].style.left=aPos[i].left+'px';
                aLi[i].style.top=aPos[i].top+'px';
                aLi[i].style.position='absolute';
                aLi[i].style.margin=0; //因为offsetLeft是包含了margin的值的,所以布局转化的时候我们需要把margin的值去掉
    };

    四、for循环每个li,给li添加鼠标移入移出事件

    (1)鼠标移入

                aLi[i].onmouseover=function(){
                    move(this,{
                        300,
                        height:300,
                        marginLeft:-75,
                        marginTop:-75
    
                    })
                    this.style.zIndex=2;
                };

    鼠标移入,引用上节中的运动框架,执行运动函数,将宽度高度设置为300px;并且设置marginLeft:-75,marginTop:-75,因为我们需要的是将li从中心放大,将当前移入的元素的层级设置为2.这样他就处于其他元素之上

    (2)输入移出,需要恢复元素状态

                aLi[i].onmouseout=function(){
                    move(this,{
                        150,
                        height:150,
                        margin:0
    
                    })
                    this.style.zIndex=0;
                };

     完整代码:

        <script>
        window.onload=function(){
            var oBox=document.getElementById('box');
            var oUl=oBox.children[0];
            var aLi=oUl.children;
            //布局转化
            var aPos=[];
            for(var i=0;i<aLi.length;i++){
                aPos[i]={
                    left:aLi[i].offsetLeft,
                    top:aLi[i].offsetTop
                };
            };
    
            for(var i=0;i<aLi.length;i++){
                aLi[i].style.left=aPos[i].left+'px';
                aLi[i].style.top=aPos[i].top+'px';
                aLi[i].style.position='absolute';
                aLi[i].style.margin=0;
            };
    
            for(var i=0;i<aLi.length;i++){
                aLi[i].onmouseover=function(){
                    move(this,{
                        300,
                        height:300,
                        marginLeft:-75,
                        marginTop:-75
    
                    })
                    this.style.zIndex=2;
                };
    
                aLi[i].onmouseout=function(){
                    move(this,{
                        150,
                        height:150,
                        margin:0
    
                    })
                    this.style.zIndex=0;
                };
    
            };
    
    
        };
    
        </script>

     最终效果:

     

  • 相关阅读:
    二进制中1的个数
    原码、反码、补码,计算机中负数的表示
    win10安装MySQL
    X86、X64、X86_64
    windows搭建深度学习环境
    驱动
    cpu、gpu
    常见的文件系统
    UltralSO制作U盘启动盘
    save、load
  • 原文地址:https://www.cnblogs.com/xuxiaozhi/p/10209049.html
Copyright © 2020-2023  润新知