Vue实现放大镜

	<!DOCTYPE html>
	<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>放大镜</title>
		<link rel="stylesheet" href="magnifier.css">
		<script src="http://upcdn.b0.upaiyun.com/libs/jquery/jquery-2.0.2.min.js"></script>
	</head>
	<body>
		<div id="magnifier">
			<div class="product">
				<div class="small-product">
					<img src="img/1.jpg" alt="" width="400" height="400">
					<div class="cover"></div>
				</div>
				<div class="list-product">
					<ul>
						<li><img src="?" alt="" width="70" height="70"></li>
					</ul>
				</div>
			</div>
			<div class="big-product"><img src="?" alt=""></div>
		</div>
		<script src="magnifier.js"></script>
		<script>
			$(function() {
				$("#magnifier").Magnifier({
					
				})
			})
		</script>
	</body>
	</html>

magnifier.css

	*{
		margin:0;
		padding:0;
	}
	#magnifier{
		display: flex;
		margin:0 auto;
		width: 1200px;
	}
	.product{
		width: 400px;
		height: 400px;
		border:1px solid #666;	
		position: relative;
	}
	.small-product{
		cursor: move;
	}
	.list-product ul{
		list-style: none;
		display: flex;
	}
	.list-product li{
		width: 80px;
		height: 80px;
		text-align: center;
		line-height: 75px;
	}
	.list-product li img{
		vertical-align: middle;
		display: inline-block;
	}
	.big-product{
		width: 400px;
		height: 400px;
		border:1px solid #666;
		margin-left: 15px;
		overflow: hidden;
		display: none;
	}
	.big-product img{
		position: relative;
	}
	.cover{
		position: absolute;
		display: none;
		background-color: rgba(255,255,255,0.7);
		width: 200px;
		height: 200px;
	}

magnifier.js

	;(function($, window, document, undefined) {
	    var pluginName = "Magnifier",
	    defaults = {
	    	proportion:2
	    };
	    function Magnifier(element, options) {
	        this.element = element;
	        this.sPro=$(this.element).find('.small-product')
	        this.bPro=$(this.element).find('.big-product')
	        this.cover=$(this.element).find('.cover')
	        this.img =$(this.element).find('.big-product img')
	        this.settings = $.extend({}, defaults, options);
	        this._defaults = defaults;
	        this._name = pluginName;
	        this.version = 'v1.0.0';
	        this.init();
	    }
	    Magnifier.prototype = {
	        init:function() {
	            const _this=this           
	            _this.sPro.mousemove(function(event){
	                _this.show_coords(event)
	            })
	            _this.sPro.mouseout(function(){
	                _this.hide_coords()
	            })
	        },
	        show_coords:function(event){
	            X=event.clientX-this.sPro.offset().left
	            Y=event.clientY-this.sPro.offset().top
	            this.show(X,Y)   
	        },
	        move:function(x,y){
	            const proportion=this.settings.proportion
	            this.bPro.css({"display":"block" })
	            this.img.css({ "left": -x*proportion, "top": -y*proportion, })
	        },
	        show:function(x,y){       
	            positionX=x-this.cover.width()/2
	            positionX>0?positionX:positionX=0
	            positionX<this.sPro.width()/2?positionX:positionX=this.sPro.width()/2
	            positionY=y-this.cover.width()/2
	            positionY>0?positionY:positionY=0
	            positionY<this.sPro.width()/2?positionY:positionY=this.sPro.width()/2
	            this.cover.css({ "left": positionX, "top": positionY, "display":"block" })
	            this.move(positionX,positionY)           
	        },
	        hide_coords:function(){
	            this.bPro.css({"display":"none" })
	            this.cover.css({"display":"none" })
	        }
	    };
	    $.fn[pluginName] = function(options) {
	        this.each(function() {
	            if (!$.data(this, "plugin_" + pluginName)) {
	                $.data(this, "plugin_" + pluginName, new Magnifier(this, options));
	            }
	        });
	        return this;
	    };
	})(jQuery, window, document);
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Vue 2的放大镜功能,你可以按照以下步骤进行操作: 1. 首先,确保你已经在项目中引入了Vue 2。 2. 在需要使用放大镜功能的组件中,定义一个data属性用于存储放大镜的状态,例如: ```javascript data() { return { zoomed: false, // 放大镜状态,默认为false mouseX: 0, // 鼠标X轴坐标 mouseY: 0, // 鼠标Y轴坐标 zoomX: 0, // 放大镜X轴坐标 zoomY: 0, // 放大镜Y轴坐标 } }, ``` 3. 在模板中,使用`v-on`指令监听鼠标移动事件,并更新鼠标坐标: ```html <template> <div @mousemove="updateMousePosition"> <!-- 图片展示区域 --> <div class="image-container"> <img src="path/to/image.jpg" alt="Image"> </div> <!-- 放大镜区域 --> <div v-if="zoomed" class="zoom-container" :style="{ left: zoomX + 'px', top: zoomY + 'px' }"> <img src="path/to/image.jpg" alt="Zoomed Image"> </div> </div> </template> ``` 4. 在方法中,实现更新鼠标坐标和放大镜位置的逻辑: ```javascript methods: { updateMousePosition(event) { this.mouseX = event.clientX; this.mouseY = event.clientY; this.updateZoomPosition(); }, updateZoomPosition() { const container = document.querySelector('.image-container'); const zoomContainer = document.querySelector('.zoom-container'); if (container && zoomContainer) { const containerRect = container.getBoundingClientRect(); const zoomContainerRect = zoomContainer.getBoundingClientRect(); // 根据鼠标坐标和图片容器位置计算放大镜位置 this.zoomX = this.mouseX - containerRect.left - zoomContainerRect.width / 2; this.zoomY = this.mouseY - containerRect.top - zoomContainerRect.height / 2; // 限制放大镜位置在图片容器内部 this.zoomX = Math.max(0, Math.min(this.zoomX, containerRect.width - zoomContainerRect.width)); this.zoomY = Math.max(0, Math.min(this.zoomY, containerRect.height - zoomContainerRect.height)); } } } ``` 5. 最后,添加一些CSS样式来定义图片容器和放大镜的样式: ```css .image-container { position: relative; } .zoom-container { position: absolute; width: 200px; /* 自定义放大镜的宽度 */ height: 200px; /* 自定义放大镜的高度 */ border: 1px solid #ccc; pointer-events: none; /* 防止放大镜影响鼠标事件 */ } ``` 这样,你就可以在Vue 2中实现一个简单的放大镜功能了。当鼠标在图片上移动时,会显示一个放大的镜头,跟随鼠标移动并显示放大的图像。根据需要,你可以自定义放大镜的样式和放大倍数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值