zoukankan      html  css  js  c++  java
  • 局部放大效果、插件

    HTML部分

    <html>
    <head>
    <meta charset="UTF-8">
    <title></title>
    <link href="css/fangda.css" />

    </head>
    <script type="text/javascript" src="js/fangda.js"></script>
    <body>
    <div id="main">
    <img src="http://www.jq22.com/img/cs/500x500-1.png">
    </div>
    </body>
    </html>

    CSS部分

    #main {
    margin:30px;
    }
    #main img {
    200px;
    height:200px;
    }

    JS部分

    window.onload = function() {
    fangda('main', 120, 100, 'blue', 0.6, 3, 'http://www.jq22.com/img/cs/500x500-1.png')
    }

    //window.onload 之后图片才加载完,才能获取宽高
    var fangda = function(mainId, boxWidth, boxHeight, bgcolor, opacity, multiple, imgsrc) {
    //获取主容器
    var main = document.getElementById(mainId);
    //获取图片
    var img = main.getElementsByTagName('img')[0];
    //获取图片宽高,设置给其父容器
    var imgW = img.offsetWidth;
    var imgH = img.offsetHeight;
    main.style.width = imgW + 'px';
    main.style.height = imgH + 'px';
    main.style.position = 'relative';
    //hidden为了后面的方块在鼠标移出后消失
    main.style.overflow = 'hidden';
    //动态创建放大的小方块,设置属性,并且添加到main内
    var box = document.createElement("div");
    box.style.width = boxWidth + 'px';
    box.style.height = boxHeight + 'px';
    box.style.backgroundColor = bgcolor;
    box.style.opacity = opacity;
    //设置绝对定位时,要想起来给其父容器设置相对定位
    box.style.position = 'absolute';
    box.style.top = 0;
    box.style.left = 0;
    box.style.cursor = 'move';
    //none是为了一开始隐藏,鼠标移入main再显示
    box.style.display = 'none';
    main.appendChild(box);


    //给main添加鼠标移入事件
    //移入显示box
    main.onmouseover = function() {
    box.style.display = 'block';
    showBox.style.display = 'block';
    showBox.style.zIndex = 999;
    }
    //移出隐藏box
    main.onmouseout = function() {
    box.style.display = 'none';
    showBox.style.display = 'none';
    showBox.style.zIndex = -999;
    }
    //设置main的鼠标移动事件,带着box走
    //提前获取一些值
    //获取main距离左边与顶部的距离
    var mainL = main.offsetLeft;
    var mainT = main.offsetTop;
    //获取main和box的宽高;
    var mainW = main.offsetWidth;
    var mainH = main.offsetHeight;
    //getComputedStyle(box).width获取到的是带有单位px的值,需要转化为整数
    var boxW = parseInt(getComputedStyle(box).width);
    var boxH = parseInt(getComputedStyle(box).height);

    //动态创建显示的容器以及其内的图片,为了使用mainL等已经获取的值
    //并且设置其属性
    var showBox = document.createElement("div");
    showBox.style.width = boxWidth * multiple + 'px';
    showBox.style.height = boxHeight * multiple + 'px';
    showBox.style.position = 'fixed';
    showBox.style.left = (mainL + mainW + 5) + 'px';
    showBox.style.top = mainT + 'px';
    showBox.style.overflow = 'hidden';
    showBox.style.display = 'none';
    showBox.style.zIndex = -999;
    //创建图片
    var showImg = document.createElement("img");
    if (imgsrc == '') {
    showImg.src = img.src;
    } else {
    showImg.src = imgsrc;
    }

    showImg.style.width = imgW * multiple + 'px';
    showImg.style.height = imgH * multiple + 'px';
    showImg.style.position = 'absolute';
    //把图片添加到showBox内,
    showBox.appendChild(showImg);
    //再把showBox添加到body内
    document.getElementsByTagName('body')[0].appendChild(showBox)

    main.onmousemove = function(event) {
    //获取鼠标位置
    var x = event.pageX;
    var y = event.pageY;

    //把获取box的宽高放在显示之后才能获取到,若想在之前获取,用getComputedStyle(box).width
    // var boxW = box.offsetWidth;
    // var boxH = box.offsetHeight;

    //对box的left和top进行赋值
    //赋值前进行判断。让box不能超出main范围
    var left = x - mainL - boxW / 2;
    var top = y - mainT - boxH / 2;
    if (left <= 0) {
    left = 0;
    }
    if (top <= 0) {
    top = 0;
    }
    if (left >= mainW - boxW) {
    left = mainW - boxW;
    }
    if (top >= mainH - boxH) {
    top = mainH - boxH;
    }
    box.style.left = left + 'px';
    box.style.top = top + 'px';
    //根据放大倍数设置showImg的位置
    showImg.style.left = -left * multiple + 'px'
    showImg.style.top = -top * multiple + 'px';
    }
    }

  • 相关阅读:
    最佳调度问题_分支限界法
    运动员最佳配对问题
    最小重量机器设计问题
    实现银行家算法和先进先出算法_对文件读写数据
    n皇后问题_回溯法
    0-1背包_回溯法
    根据前序、中序、后序遍历还原二叉树
    矩阵连乘问题_动态规划
    最长公共子序列_动态规划
    最优二叉查找树_动态规划
  • 原文地址:https://www.cnblogs.com/L-Y-F/p/8554845.html
Copyright © 2011-2022 走看看