每天学一个jquery插件-放大镜缩放

Posted 阿飞超努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天学一个jquery插件-放大镜缩放相关的知识,希望对你有一定的参考价值。

每天一个jquery插件-放大镜缩放

放大镜缩放

之前做过放大镜的效果,然后现在优化了一点点然后加了滚轮控制缩放比例的事件,希望对大家有启发

效果如下
在这里插入图片描述

代码部分

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>放大镜实现</title>
		<script src="js/jquery-3.4.1.min.js"></script>
		<style>
			* {
				margin: 0;
				padding: 0;
			}

			#div {
				width: 400px;
				height: 400px;
				margin: 20px;
				border: 1px solid lightgray;
				background-image: url(img/1.jpg);
				background-repeat: no-repeat;
				background-position: center center;
				background-size: 100% 100%;
			}

			.rel {
				z-index: 1;
				position: relative;
			}

			.glass {
				/* display: none; */
				border-radius: 50%;
				position: absolute;
				background-color: black;
				pointer-events: none;
				background-repeat: no-repeat;
				opacity: 0.95;
			}
		</style>
	</head>
	<body>
		<div id="div">

		</div>
	</body>
</html>
<script>
	$(function() {
		$("#div").glass();
	})
	$.prototype.glass = function(op) {
		op = op == undefined ? {} : op;
		op.width = op.width == undefined ? 100 : op.width;
		op.height = op.height == undefined ? 100 : op.height;
		op.span = op.span == undefined ? 2 : op.span; //放大率
		op.wheel  =op.wheel==undefined?5:op.wheel;//滚轮的缩放率
		op.flag = undefined ? false : true; //是否允许滚轮控制缩放
		this.arrs().forEach(item => {
			var $that = $(item);
			$that.addClass('rel');
			var $glass = $("<div class='glass'></div>");
			$glass.css(op);
			$glass.appendTo($that);
			$glass.hide();
			var bimg = $that.css('background-image');
			$glass.css({
				'background-image': bimg,
				'background-size': ($that.width() * op.span) + 'px ' + ($that.height() * op.span) +'px'
			});
			var x = 0;
			var y = 0;
			//放大镜效果
			$that.mouseenter(function() {
				$glass.show();
			}).mouseleave(function() {
				$glass.hide();
			}).mousemove(function(e) {
				x = e.offsetX;
				y = e.offsetY;
				$glass.css({
					'left': x - op.width / 2,
					'top': y - op.height / 2,
					'background-position-x': (op.width / op.span - (x * op.span)) + 'px',
					'background-position-y': (op.height / op.span - (y * op.span)) + 'px',	
					'background-size': ($that.width() * op.span) + 'px ' + ($that.height() * op.span) +'px'
				})
			}).on('mousewheel', function(e) {
				var temp = (e.originalEvent.deltaY/op.wheel)/100;
				op.span +=temp; 
				$glass.css({
					'left': x - op.width / 2,
					'top': y - op.height / 2,
					'background-position-x': (op.width / op.span - (x * op.span)) + 'px',
					'background-position-y': (op.height / op.span - (y * op.span)) + 'px',	
					'background-size': ($that.width() * op.span) + 'px ' + ($that.height() * op.span) +'px'
				})
			})
			//滚轮控制缩放比例

		})
	}
	$.prototype.arrs = function() {
		var that = this;
		var arr = [];
		for (var i = 0; i < that.length; i++) {
			arr.push($(that[i]));
		}
		return arr;
	}
</script>

思路解释

  • 思路不难,就是移动的时候能拿到一个相对的参数,我们在按照这个参数关联里面背景图片的位置摆放
  • 并且之前是容器里面套img标签做,起始单纯的div的背景图的background-属性里面也能达到一样的效果
  • 完事,休息

以上是关于每天学一个jquery插件-放大镜缩放的主要内容,如果未能解决你的问题,请参考以下文章

一个轻量级的jQuery放大镜缩放插件。

每天学一个jquery插件-侧边小卡片

每天学一个jquery插件-日历的效果

每天学一个jquery插件-多级的菜单

每天学一个jquery插件-水一下css

jquery panzoom 插件默认缩放?