`
xiangqian0505
  • 浏览: 322015 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

图片某一个区域放大缩小实例

阅读更多
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Magnifier</title>
<style type="text/css">
#magnifier{
    width:500px;
    height:696px;
    position:absolute;
    top:100px;
    left:250px;
    font-size:0;
    border:1px solid #000;
}
#img{
    width:500px;
    height:696px;
}
#Browser{
    border:1px solid #000;
    z-index:100;
    position:absolute;
    background:#555;
}
#mag{
    border:1px solid #000;
    overflow:hidden;
    z-index:100;
}
</style>
<script type="text/javascript">

function getEventObject(W3CEvent) {            //事件标准化函数
    return W3CEvent || window.event;
}


function getPointerPosition(e) {            //兼容浏览器的鼠标x,y获得函数
    e = e || getEventObject(e);
    var x = e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));
    var y = e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
    
    return { 'x':x,'y':y };
}

function setOpacity(elem,level) {            //兼容浏览器设置透明值
    if(elem.filters) {
        elem.style.filter = 'alpha(opacity=' + level * 100 + ')';
    } else {
        elem.style.opacity = level;
    }
}

function css(elem,prop) {                //css设置函数,可以方便设置css值,并且兼容设置透明值
    for(var i in prop) {
        if(i == 'opacity') {
            setOpacity(elem,prop[i]);
        } else {
            elem.style[i] = prop[i];
        }
    }
    return elem;
}

var magnifier = {
    m : null,
    
    init:function(magni){
        var m = this.m = magni || {
            cont : null,        //装载原始图像的div
            img : null,            //放大的图像
            mag : null,            //放大框
            scale : 15            //比例值,设置的值越大放大越大,但是这里有个问题就是如果不可以整除时,会产生些很小的白边,目前不知道如何解决
        }
        
        css(m.img,{    
            'position' : 'absolute',
            'width' : (m.cont.clientWidth * m.scale) + 'px',                //原始图像的宽*比例值    
            'height' : (m.cont.clientHeight * m.scale) + 'px'                //原始图像的高*比例值
            })
        
        css(m.mag,{
            'display' : 'none',
            'width' : m.cont.clientWidth + 'px',            //m.cont为原始图像,与原始图像等宽
            'height' : m.cont.clientHeight + 'px',
            'position' : 'absolute',
            'left' : m.cont.offsetLeft + m.cont.offsetWidth + 10 + 'px',        //放大框的位置为原始图像的右方远10px
            'top' : m.cont.offsetTop + 'px'
            })
        
        var borderWid = m.cont.getElementsByTagName('div')[0].offsetWidth - m.cont.getElementsByTagName('div')[0].clientWidth;        //获取border的宽
        
        css(m.cont.getElementsByTagName('div')[0],{            //m.cont.getElementsByTagName('div')[0]为浏览框
            'display' : 'none',                                //开始设置为不可见
            'width' : m.cont.clientWidth / m.scale - borderWid + 'px',            //原始图片的宽/比例值 - border的宽度
            'height' : m.cont.clientHeight / m.scale - borderWid + 'px',        //原始图片的高/比例值 - border的宽度
            'opacity' : 0.5                    //设置透明度
            })
        
        m.img.src = m.cont.getElementsByTagName('img')[0].src;            //让原始图像的src值给予放大图像
        m.cont.style.cursor = 'crosshair';
        
        m.cont.onmouseover = magnifier.start;
        
    },
    
    start:function(e){
        
        if(document.all){                //只在IE下执行,主要避免IE6的select无法覆盖
            magnifier.createIframe(magnifier.m.img);
        }
        
        this.onmousemove = magnifier.move;        //this指向m.cont
        this.onmouseout = magnifier.end;
    },
    
    move:function(e){
        var pos = getPointerPosition(e);        //事件标准化
        
        this.getElementsByTagName('div')[0].style.display = '';
        
        css(this.getElementsByTagName('div')[0],{
            'top' : Math.min(Math.max(pos.y - this.offsetTop - parseInt(this.getElementsByTagName('div')[0].style.height) / 2,0),this.clientHeight - this.getElementsByTagName('div')[0].offsetHeight) + 'px',
            'left' : Math.min(Math.max(pos.x - this.offsetLeft - parseInt(this.getElementsByTagName('div')[0].style.width) / 2,0),this.clientWidth - this.getElementsByTagName('div')[0].offsetWidth) + 'px'            //left=鼠标x - this.offsetLeft - 浏览框宽/2,Math.max和Math.min让浏览框不会超出图像
            })
        
        magnifier.m.mag.style.display = '';
        
        css(magnifier.m.img,{
            'top' : - (parseInt(this.getElementsByTagName('div')[0].style.top) * magnifier.m.scale) + 'px',
            'left' : - (parseInt(this.getElementsByTagName('div')[0].style.left) * magnifier.m.scale) + 'px'
            })
        
    },
    
    end:function(e){
        this.getElementsByTagName('div')[0].style.display = 'none';
        magnifier.removeIframe(magnifier.m.img);        //销毁iframe
        
        magnifier.m.mag.style.display = 'none';
    },
    
    createIframe:function(elem){
        var layer = document.createElement('iframe');
        layer.tabIndex = '-1';
        layer.src = 'javascript:false;';
        elem.parentNode.appendChild(layer);
        
        layer.style.width = elem.offsetWidth + 'px';
        layer.style.height = elem.offsetHeight + 'px';
    },
    
    removeIframe:function(elem){
        var layers = elem.parentNode.getElementsByTagName('iframe');
        while(layers.length >0){
            layers[0].parentNode.removeChild(layers[0]);
        }
    }
}

window.onload = function(){
    magnifier.init({
                 cont : document.getElementById('magnifier'),
                 img : document.getElementById('magnifierImg'),
                 mag : document.getElementById('mag'),
                 scale : 3
                 });
}
</script>
</head>

<body>
<div id="magnifier">
<img src="lib/images/1.jpg" id="img" />
<div id="Browser"></div>
</div>
<div id="mag"><img id="magnifierImg" /></div>
<select style="position:absolute;top:200px;left:650px;width:100px;">
<option>select测试</option>
<option>是否能覆盖</option>
</select>
</body>
</html>
分享到:
评论

相关推荐

    C++ MFC 放大和缩小图片源码

    在C++编程环境中,Microsoft Foundation Classes (MFC) 是一个强大的库,用于构建Windows应用程序。MFC 提供了丰富的类和函数,简化了图形用户界面(GUI)的开发,包括图像处理功能。在这个主题中,我们将深入探讨...

    JQuery点击放大缩小图片并可左右滑动

    总的来说,"JQuery点击放大缩小图片并可左右滑动"是一个综合运用了JQuery事件处理、DOM操作、CSS变换以及可能的第三方插件功能的实例。它展示了JQuery如何便捷地实现复杂的交互效果,为网页增添生动性和用户体验。

    MFC实现图形放大缩小

    MFC实现图形放大缩小 本文将通过MFC库函数StretchBlt的使用来实现对图像位图的局部细节的放大功能,并且可以随意放大、缩小,选取到合适的放大倍数来对图像的细节进行观察。 一、引言 在观察图像时,我们经常需要...

    cropper+layui实现图片裁剪、旋转、放大缩小后上传

    然后,通过layui的DOM操作和事件监听,创建一个图片容器,并初始化cropper实例。当用户完成图片编辑后,可以通过cropper的API获取裁剪结果,通常是以Base64编码的图片数据,将其作为表单数据的一部分,通过AJAX发送...

    VB.net图片放大缩小反转色彩实例.rar

    VB.net图片放大缩小反转色彩实例,打开一张图片,可放大缩小图片,可将色彩反转,不知道是不是色彩反相,可看下截图所示的效果,另外还支持旋转图片,图片显示区域的窗口可以拉伸放大,这是VB.NET源码,了解一下图像...

    mfc加载位图,并可以放大、缩小图片

    在MFC(Microsoft Foundation Classes)框架中,加载位图并实现图片的放大和缩小功能是一项常见的任务,尤其在开发图形用户界面(GUI)应用程序时。本文将深入探讨如何使用MFC来实现这一功能。 首先,我们需要了解...

    mfc-static控件显示图片-滚动条-放大缩小

    在MFC(Microsoft Foundation Class)库中,静态控件(MFC-Static)通常是用来显示文本的,但通过一些特定的技巧,我们也可以使它显示图片,并且添加滚动条及实现图片的放大缩小功能。这一过程涉及到多个MFC类的交互...

    中间图片放大,两边缩小,轮播效果

    1. **图片布局**:通常,轮播图片会被设置在一个容器内,这个容器的宽度大于单个图片的宽度,以容纳中间放大后的图片。图片通常水平排列,通过CSS的`float`或`display: flex`属性进行布局。 2. **图片大小调整**:...

    MFC 鼠标选定显示范围,图片放大缩小,带左右滚动条显示

    本项目“MFC 鼠标选定显示范围,图片放大缩小,带左右滚动条显示”就是这样一个示例,它实现了用户通过鼠标选择图像的特定区域,然后该区域会被放大显示,并且提供了左右滚动条以便浏览放大后的图像。 1. **MFC框架...

    C#实现chart数据点的放大缩小显示、框选、删除、平移.rar

    本项目“C#实现chart数据点的放大缩小显示、框选、删除、平移.rar”是关于如何通过C#语言扩展Chart控件功能的一个实例,具体涉及以下几个关键知识点: 1. **Chart控件的基本操作**:首先,我们需要了解Chart控件的...

    MSChartExtensionDemo放大缩小移动chart.rar

    总的来说,MSChartExtensionDemo是一个展示MSChart控件高级交互特性的实例,它可以帮助开发者更好地理解和运用MSChart控件,提升数据可视化应用的用户体验。通过学习和研究这个示例,你可以掌握如何创建具有放大、...

    双击图片放大缩小及多点触控

    你需要创建一个`GestureDetector`实例,然后重写`onDown()`、`onSingleTapUp()`、`onDoubleTap()`等方法。 - 在`onDoubleTap()`方法中,根据当前图片的缩放级别,决定是放大还是缩小图片。可以使用`...

    PB中图像转换、放大、缩小、旋转、打印等内容

    对图像进行旋转是另一个复杂的操作,因为需要考虑旋转中心点、旋转角度以及旋转后的图像是否需要填充空白区域。PB中的`Rotate`函数可以实现这个功能,通过指定旋转角度(以度为单位)和是否保持原始大小。旋转可能...

    图片放大缩小,图片选区截图,图片加密解密,旋转,拖动

    在IT行业中,图像处理是一项非常重要的技术,广泛应用于各种领域,如摄影、设计、软件开发等。本项目集成了多项图像处理功能,...同时,这也是学习图像处理和Windows编程的一个实例,有助于深入理解相关概念和技术。

    瀑布流显示图片,左侧TabHost选项卡,多点触摸技术放大缩小图片

    首先创建一个ScaleGestureDetector实例,然后重写onScale()回调方法,在其中计算缩放比例并更新图片的Matrix,最后将更新后的Matrix应用到ImageView。同时,为了提供良好的用户体验,还需要处理单指拖动(平移)操作...

    滑轮控制视图放大与缩小

    总的来说,"滑轮控制视图放大与缩小"是一个涉及到Windows消息处理、MFC视图类、坐标变换和图形渲染等多个方面的技术问题。通过理解和应用这些知识,开发者可以为用户提供更加直观且流畅的缩放体验。在实际项目中,...

    android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果

    本文将深入探讨如何自定义一个ImageView,以实现在屏幕上通过手势滑动图片以及支持多点触摸进行图片的放大和缩小效果。这个自定义ImageView的实现,通常会涉及到Android的触摸事件处理、Matrix变换以及手势识别等...

    vue.js+Echarts开发图表放大缩小功能实例

    通过以上方式,作者展示了一个使用Vue.js和Echarts开发的图表放大缩小功能的完整实例。这个示例不仅适用于柱状图,也可以根据需要调整应用到Echarts支持的其他类型的图表上,如折线图、饼图等。这种方式为Vue.js和...

    一个简单的gis系统(放大、缩小、漫游

    在本项目中,我们关注的是一个简单的GIS系统,它实现了基本的交互功能,如放大、缩小和漫游。这个系统是基于MFC(Microsoft Foundation Classes)开发的,MFC是微软提供的一套面向对象的C++库,用于简化Windows应用...

Global site tag (gtag.js) - Google Analytics