图片拖拽缩放功能:兼容Chrome、Firefox、IE8+
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>拖拽图片demo</title>
<script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<style>
.test-box {
width: 500px;
height: 400px;
border: 1px solid yellow;
overflow: hidden;
margin: 30px auto;
position: relative;
}
.test-img {
position: absolute;
top: 0;
left: 0;
}
</style>
</head>
<body>
<div class="test-box">
<img class="test-img" src="http://images.669pic.com/element_psd/72/58/16/45/1c8e874b9b360550caab1a98a674cd73.jpg" alt="">
</div>
<script>
// 缩放
var imgZoom = {
init: function() {
this.zoomImage();
},
zoomImage: function() {
var _this = this;
$('.test-box').off('mousewheel').on('mousewheel', '.test-img', function(e) {
_this.mouseScroll($(this));
});
$('.test-box').off('DOMMouseScroll').on('DOMMouseScroll', '.test-img', function(e) {
_this.mouseScroll($(this), e);
});
},
mouseScroll: function($img,e) {
var e = e || window.event;
var oper = Math.max(-1, Math.min(1,(e.wheelDelta || -e.originalEvent.detail)));
var imgWidth = $img.width();
var newWidth = Math.max(350, Math.min(1200,imgWidth + (30*oper)));
var left = parseInt($img.css("left")) - (newWidth - imgWidth) / 2;
$img.css({
"width": newWidth + "px",
"left": left + "px"
})
},
}; // 拖拽
var imgDrag = function() {
var isDrag = false;
var dragTarget;
var startX, startY;
var imgPositionTop,imgPositionLeft;
var boxWidthMin, boxWidthMax, boxHeightMin, boxHeightMax;
function moveMouse(e) {
if (isDrag) {
var e = window.event || e;
var clientY = e.clientY;
var clientX = e.clientX;
if(clientY >= boxHeightMin && clientY <= boxHeightMax) {
dragTarget.style.top = imgPositionTop + clientY - startY + "px";
}
if(clientX >= boxWidthMin && clientX <= boxWidthMax) {
dragTarget.style.left = imgPositionLeft + clientX - startX + "px";
}
return false;
}
}
function initDrag(e) {
var e = window.event || e;
var dragHandle = e.srcElement;
var topElement = "HTML";
var eventBtn = e.button == 0 || e.button == 1; // 鼠标左键 while (dragHandle.tagName != topElement && dragHandle.className != "test-img") {
dragHandle = dragHandle.parentElement;
}
if (dragHandle.className == "test-img" && eventBtn) {
isDrag = true;
dragTarget = dragHandle;
imgPositionTop = parseInt(dragTarget.style.top + 0);
startY = e.clientY;
imgPositionLeft = parseInt(dragTarget.style.left + 0);
startX = e.clientX; var initVal = 50; // 防止图片拖出框内的最小边界值
var $box = $('.test-box');
boxWidthMin = $box.offset().left + initVal;
boxWidthMax = $box.offset().left + $box.width() - initVal;
boxHeightMin = $box.offset().top + initVal;
boxHeightMax = $box.offset().top + $box.height() - initVal; $(document).unbind('mousemove').bind('mousemove', moveMouse);
return false;
}
} $(document).unbind("mousedown").bind("mousedown", initDrag);
$(document).unbind("mouseup").bind("mouseup", function() {
isDrag = false;
});
}; imgZoom.init();
imgDrag();
</script>
</body>
</html>
图片拖拽缩放功能:兼容Chrome、Firefox、IE8+的更多相关文章
- Vue富文本编辑器(图片拖拽缩放)
富文本编辑器(图片拖拽缩放) 需求: 根据业务要求,需要能够上传图片,且上传的图片能在移动端中占满屏幕宽度,故需要能等比缩放上传的图片,还需要能拖拽.缩放.改变图片大小.尝试多个第三方富文本编辑器,很 ...
- vue在移动端使用alloyfinger手势库操作图片拖拽、缩放
最近开发一个活动需要在手机上给上传的头像加上边框.装饰,需要拖拽.手势缩放边框下的头像图片,因为是vue项目,开始尝试了vue-drag-resize这个组件,对图片拖拽支持很完美,但是无法手势缩放, ...
- Android 仿微信朋友圈发表图片拖拽和删除功能
朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...
- CSS 奇思妙想 | 使用 resize 实现强大的图片拖拽切换预览功能
本文将介绍一个非常有意思的功能,使用纯 CSS 利用 resize 实现强大的图片切换预览功能.类似于这样: 思路 首先,要实现这样一个效果如果不要求可以拖拽,其实有非常多的办法. 将两张图片叠加在一 ...
- HTML5图片拖拽预览原理及实现
一.前言 这两天恰好有一位同事问我怎样做一个图片预览功能.作为现代人的我们首先想到的当然是HTML5啦,其实HTML5做图片预览已经是一个老生常谈的问题了.我在这里就简单说说其中相关的一些东西,当然会 ...
- 自制一个H5图片拖拽、裁剪插件(原生JS)
前言 如今的H5运营活动中,有很多都是让用户拍照或者上传图片,然后对照片加滤镜.加贴纸.评颜值之类的.尤其是一些拍照软件公司的运营活动几乎全部都是这样的. 博主也做过不少,为了省事就封装了一个简单的图 ...
- canvas 图片拖拽旋转之一——坐标转换translate
引言 对canvas中绘制的图片进行旋转操作,需要使用ctx.translate变换坐标系,将图片旋转的基点设为坐标系的原点,然后ctx.rotate旋转. 这个时候,因为canvas坐标系发生了旋转 ...
- HTML5多图片拖拽上传带进度条
前言 昨天利用css2的clip属性实现了网页进度条觉得还不错,但是很多情况下,我们在那些时候用进度条呢,一般网页加载的时候如果有需要可以用,那么问题就来了,怎么才算整个加载完毕呢,是页面主要模块加载 ...
- canvas 图片拖拽旋转之二——canvas状态保存(save和restore)
引言 在上一篇日志“canvas 图片拖拽旋转之一”中,对坐标转换有了比较深入的了解,但是仅仅利用坐标转换实现的拖拽旋转,会改变canvas坐标系的状态,从而影响画布上其他元素的绘制.因此,这个时候需 ...
随机推荐
- HDU3265 Examining the Rooms【stirling数】
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=3625 题目大意: 有N个房间,每一个房间的要是随机放在某个房间内,概率同样.有K次炸门的机会. 求 ...
- Cocos2d-x学习笔记(十四)CCAutoreleasePool具体解释
原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38964637 前言 之前学了那么多的内容.差点儿全部的控件都要涉及内存 ...
- SQLServer2008 R2安装步骤
1.解压缩sqlserver_2008_r2.iso到指定的目录,记住这个目录的位置 sqlserver_2008_r2.iso下载位置是:http://download.csdn.net/u0123 ...
- C++ STL:vector
不定长数组:vetor 它就像一个二维数组.仅仅是第一维的大小是固定的,可是第二维的大小不固定. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAx ...
- Sqoop 数据导入导出实践
Sqoop是一个用来将hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:mysql,oracle,等)中的数据导入到hadoop的HDFS中,也可以将HDFS的数据导入到 ...
- selenium无法定位元素问题
在用自动化测试工具selenium完成下载任务时,经常会遇到定位不到元素的情况,总结如下: 1.frame/iframe原因定位不到元素: 这个是最常见的原因,首先要理解下frame的实质,frame ...
- babel的插件
比如想编译es6的箭头函数,需要使用babel-plugin-transform-es2015-arrow-functions这个插件 此外babel提供了 prests(预设) 相当于是插件的集合 ...
- Python协程一点理解
协程,又称微线程,纤程.英文名Coroutine. 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度.在一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程 ...
- 03012_预处理对象executeQuery方法(实现数据库的查询)
1.概述 (1)通过预处理对象的executeQuery方法,完成记录的select语句的执行: (2)操作格式统一如下: ①注册驱动: ②获取连接: ③获取预处理对象: ④SQL语句占位符设置实际参 ...
- CSUOJ 1644 超能陆战队
1644: 超能陆战队 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 6 Solved: 1[Submit][Status][Web Board] D ...