运动—图片中心放大

一、布局

DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8"> <title>Documenttitle> <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){ 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[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].οnmοuseοver=function(){
                move(this,{
                    width:300,
                    height:300, marginLeft:-75, marginTop:-75 }) this.style.zIndex=2; };

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

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

            aLi[i].οnmοuseοut=function(){
                move(this,{
                    width:150,
                    height:150, margin:0 }) this.style.zIndex=0; };

 完整代码:

    

 最终效果:

运动—图片中心放大_第1张图片

 

转载于:https://www.cnblogs.com/xuxiaozhi/p/10209049.html

你可能感兴趣的:(运动—图片中心放大)