`
lihong11
  • 浏览: 456941 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

js图片放大镜效果-类似淘宝放大镜

阅读更多
<%@ 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 HTML 4.01 Transitional//EN">
<html>
<head>
    <base href="<%=basePath%>">
	<title>Magnifier</title>
	<style type="text/css">
		#magnifier{
			width:350px;
			height:280px;
			position:absolute;
			top:100px;
			left:250px;
			font-size:0;
			border:1px solid #000;
		}
		#img{
			width:350px;
			height:280px;
		}
		#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="images/01.gif" id="img" />
	<div id="Browser"></div>
</div>
<div id="mag"><img id="magnifierImg" /></div>
</body>
<script type="text/javascript">
  
//移除img外层的<p>标签
   
$(function(){
         
    $("p").each(function(){
             
      var txt=$(this).html();
             
      $(this).replaceWith(txt);
       
    })
     
}) 
 
</script>
</html>

 

分享到:
评论

相关推荐

    图片放大镜--模仿淘宝

    本项目“图片放大镜--模仿淘宝”旨在实现类似的功能,让用户能够无损地放大图片以观察细节,提升购物体验。 在网页或应用开发中,图片放大镜功能主要由以下几个关键知识点构成: 1. **JavaScript与jQuery**:通常...

    商品图片放大镜效果(类似淘宝)

    "商品图片放大镜效果(类似淘宝)" 是一种常见的交互设计,它允许用户在不离开当前页面的情况下,通过鼠标悬停查看商品图片的局部细节,从而提高购物体验。这种效果主要依赖于JavaScript(JS)技术来实现,下面我们...

    jquery实现类似淘宝的图片放大镜效果

    本教程将详细介绍如何使用jQuery来实现类似淘宝的图片放大镜效果。 首先,我们需要理解基本原理。放大镜效果由两部分组成:主图(通常是原始大小的图片)和放大区域(显示放大后的细节)。当用户鼠标悬停在主图上时...

    JQuery 类似淘宝商品放大镜效果

    `js` 文件夹通常包含实现放大镜效果的 JavaScript 代码。在这个例子中,可能会有一个名为 `jquery.zoom.js` 的文件,它是基于 jQuery 的插件。这个插件负责监听鼠标移动事件,计算放大区域的位置,并实时更新放大镜...

    图片放大镜效果示例

    在IT领域,图片放大镜效果通常用于电商网站或者图像展示应用中,允许用户对细节部分进行查看,提高用户体验。这个示例项目就是针对这一需求设计的,它利用JavaScript技术实现了一个图片放大镜的功能。 首先,我们要...

    js实现放大镜(类似淘宝可以切换图片).rar

    这个"js实现放大镜(类似淘宝可以切换图片).rar"压缩包文件包含了实现这一功能的代码示例。下面我们将深入探讨相关知识点。 首先,我们来了解JavaScript作为开发语言的基础。JavaScript是一种轻量级、解释型的脚本...

    类似淘宝图片放大镜 图片的缩放

    今天我们将探讨如何实现类似淘宝图片放大镜效果,以及如何使用jQuery库来简化这一过程。 首先,我们需要了解这种效果的基本原理。放大镜功能主要由两部分组成:一个较小的原图和一个可以放大的区域(通常是一个带有...

    vue3+vite+ts 仿淘宝放大镜效果

    在本项目中,我们主要探讨的是如何利用Vue3、Vite和TypeScript来实现一个类似于淘宝网站中的商品图片放大镜效果。这个效果通常用于增强用户的购物体验,让他们能更清晰地查看商品细节。以下是实现这一功能所涉及的...

    JavaScript实现放大镜效果

    本文将详细介绍如何使用JavaScript和HTML5技术来创建三种不同的放大镜效果:圆形放大镜、直接矩形放大镜以及类似淘宝或京东的浮动放大镜效果。 首先,我们从基础开始,讲解JavaScript在网页中的角色。JavaScript是...

    jQuery放大镜效果仿淘宝放大效果

    总的来说,jQuery放大镜效果是一种增强商品图片预览体验的实用技术,它通过JavaScript和CSS的结合,为用户提供了类似淘宝网的互动式放大功能。通过掌握这些技术,开发者能够为自己的电商网站或任何需要详细图片预览...

    jQuery仿淘宝商品详情页图片放大镜效果,支持IE6及以上

    "jQuery仿淘宝商品详情页图片放大镜效果"就是一个实现这种功能的技术方案,它适用于IE6及以上的浏览器,旨在提供与淘宝网站类似的放大镜效果。 首先,jQuery是一个强大的JavaScript库,它的易用性和丰富的插件使其...

    JS+html仿淘宝图片放大镜预览效果

    "JS+HTML仿淘宝图片放大镜预览效果"是一种常见的实现方式,它利用JavaScript动态操作DOM元素和CSS样式,结合HTML结构,模拟出淘宝网站上图片放大镜的效果。这种效果允许用户在不离开当前页面的情况下,通过鼠标悬停...

    淘宝图片放大镜新版效果 - 翻页和点击的效果也全有,超值 .

    Cloud-Zoom是一个广泛使用的JavaScript库,它能创建类似放大镜的效果,用户可以拖动鼠标在图片上,放大镜会跟随并显示放大区域,提供了一种直观的方式来查看图片细节。 在压缩包中的文件结构来看,`index.html`是主...

    淘宝商品放大镜效果

    总之,淘宝商品放大镜效果是电商网站提高用户体验的重要手段,通过JavaScript和CSS的巧妙结合,实现了动态的图片放大功能,让购物变得更加直观和方便。通过学习和实践这种效果,开发者不仅可以提升自己的前端技能,...

    原生JavaScript实现淘宝放大镜效果

    运用原生js基础知识实现类似于淘宝放大镜效果,图片是两张大小不同的图片,图片资源自己寻找

    淘宝放大镜效果

    淘宝放大镜效果是一种在电商网站上广泛使用的交互设计,它允许用户通过鼠标悬停在商品图片上时,局部放大图片的细节,以便更清晰地查看商品的纹理、颜色和其他特征。这种功能对于提升用户体验,尤其是在线购物体验,...

    JS实现局部放大效果(类似于淘宝商品显示局部放大)

    这段JavaScript代码的工作原理是:当鼠标在原始图片上移动时,计算放大镜相对于图片的位置,并根据这个位置计算出放大镜内部应显示的图像坐标。然后,创建一个新的图像元素,设置其`src`为原始图片,但其位置和大小...

    实现文字、图片等放大镜的效果

    通过以上步骤,你就可以在自己的网页上实现类似淘宝网的商品图片放大效果。这个功能对于提高用户对产品细节的理解和购买决策具有积极的影响。同时,理解并掌握这种效果的实现原理也有助于提升你的前端开发技能。

    类似淘宝的图片放大功能

    在开发一个类似淘宝的图片查看功能时,"图片放大镜"是提高用户体验的关键技术之一。这个功能让用户在不离开当前页面的情况下,能够清晰地查看商品的细节,从而增强购物体验。下面将详细介绍如何实现这样的功能,并...

    类似淘宝的放大镜效果

    在网页设计中,"类似淘宝的放大镜效果"是一种常见的用户体验增强技术,它允许用户在鼠标悬停在商品图片上时,看到一个放大版本的局部细节。这种效果为在线购物者提供了一个更清晰、更直观的产品视图,帮助他们更好地...

Global site tag (gtag.js) - Google Analytics