运动—图片中心放大

一、布局

<!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,{
                    width: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,{
                    width: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,{
                    width:300,
                    height:300,
                    marginLeft:-75,
                    marginTop:-75

                })
                this.style.zIndex=2;
            };

            aLi[i].onmouseout=function(){
                move(this,{
                    width:150,
                    height:150,
                    margin:0

                })
                this.style.zIndex=0;
            };

        };

    };

    </script>

最终效果:

时间: 2024-10-07 14:10:12

运动—图片中心放大的相关文章

UIButon 控件的尺寸放大缩小(也可以理解为图片的放大缩小,思路是一样的)-学习笔记

图片的放大缩小功能的简单实现(以一个简单的猜图项目中的放大缩小为例) 思路: 1.创建一个UIButton * guessimage  控件,设定好位置,再创建一个button bigImage控件测试一下 放大图片的方法 goToBig,同样放好位置: 2.给 guessimage 设置边距,尺寸大小,同样 bigImage 也进行设置等等: 3.给 bigImage 添加点击 放大图片的方法:goToBig, 在goToBig里面 定义 4个 座标的值,也就是 CGFloat guessim

小案例之手风琴和多图片中心点放大

手风琴: html: <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{list-style-type: none;margin: 0;padding: 0;} #box{position: relative;margin: 50px auto;border:

UI_如何实现点击图片之后放大,或缩放功能

如何实现"查看大图"功能. ** 点击"图片"按钮, 显示大图 需求分析: 问:&1.点击图片之后就放大图片的功能的步骤是什么? 1>创建一个和屏幕一样大小的半透明UIView, 用来遮盖整个界面 2>需要把“图片按钮”, 放置在coverView的前面 3>将图片按钮放大 4>将这些操作放在block动画当中. 问:&2.黑色半透明的背景图片是一个什么控件?点击灰色背景后需要做哪些操作? 解析:是一个按钮,因为需要监听点击事

asp.net(C#)利用QRCode生成二维码(续)-在二维码图片中心加Logo或图像 .

<%@ WebHandler Language="C#" Class="GetQRCode" %> using System; using System.Web; using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; using ThoughtWorks.QRCode.Codec.Util; using System.IO; using System.Text; us

Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能

首先推荐一下鸿洋大大的打造个性的图片预览与多点触控视频教程,这套教程教我们一步一步实现了多点触控实现对图片的平移和缩放的功能,这篇文章我将在鸿洋大大的基础之上做了一些扩展功能: 1.图片的惯性滑动 2.图片缩放小于正常比例时,松手会自动回弹成正常比例 3.图片缩放大于最大比例时,松手会自动回弹成最大比例 实现图片的缩放,平移,双击缩放等基本功能的代码如下,每一行代码我都做了详细的注释 public class ZoomImageView extends ImageView implements

Android 本地/网路下载图片实现放大缩小

 Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activity; import android.os.Bundle; import com.example.ImageViewCustom.CustomControl.MImageView; public class MyActivity extends Activity { MImageView mImag

iOS设置图片的放大效果

比如在tableview的头部设置一张图片,下拉tableview,上面的图片会显示放大的效果. 首先定义UIImageView,设置相关参数 static CGFloat kImageOriginHight = 240.f; expandZoomImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -kImageOriginHight, self.tableView.frame.size.width, kImageOrigin

android 图片双击放大倍数的算法

图片双击放大倍数和图片大小.显示图片的view大小,及图片当前的scale大小均有关系. 为了避免图片放大过大,设置了一个放大倍数的最大限制SCALE_LIMIT,目前该值为4. 具体算法如下所示: 图片的宽和高分别记为:imageW imageH 显示图片的view宽和高分别记为:viewW viewH 几个重要的比例记为: scale_1 = viewW / imageW scale_2 = viewH / imageH scale_3 = viewW / imageH scale_4 =

Android Gallery图片双击放大倍数的算法

图片双击放大倍数和图片大小.显示图片的view大小,及图片当前的scale大小均有关系. 为了避免图片放大过大,设置了一个放大倍数的最大限制SCALE_LIMIT,目前该值为4. 具体算法如下所示: 图片的宽和高分别记为:imageW imageH 显示图片的view宽和高分别记为:viewW viewH 几个重要的比例记为: scale_1 = viewW / imageW; scale_2 = viewH / imageH; scale_3 = viewW / imageH; scale_4