图片旋转、鼠标滚轮缩放、镜像、切换图片js代码


Posted in Javascript onDecember 13, 2020

本文实例为大家展示了图片旋转、鼠标滚轮缩放、镜像、切换图片多重效果,提供了详细的代码,分享给大家供大家参考,具体内容如下

具体代码:

<!DOCTYPE html>
<html lang="zh-cn">
 <head>
 <title>图片旋转,鼠标滚轮缩放,镜像,切换图片</title>
 <meta charset="utf-8" />
 <!--<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>-->
 <script type="text/javascript" src="js/abc.js"></script>
 </head>

 <body>

 <h1 style="text-align: center;color: blue;">效果预览</h1>
 <script>
 //容器对象
 var ImageTrans = function(container, options) {
 this._initialize(container, options);
 this._initMode();
 if (this._support) {
  this._initContainer();
  this._init();
 } else { //模式不支持
  this.onError("not support");
 }
 };
 ImageTrans.prototype = {
 //初始化程序
 _initialize: function(container, options) {
  var container = this._container = $$(container);
 this._clientWidth = container.clientWidth; //变换区域宽度
 this._clientHeight = container.clientHeight; //变换区域高度
 this._img = new Image(); //图片对象
 this._style = {}; //备份样式
 this._x = this._y = 1; //水平/垂直变换参数
 this._radian = 0; //旋转变换参数
 this._support = false; //是否支持变换
 this._init = this._load = this._show = this._dispose = $$.emptyFunction;
  var opt = this._setOptions(options);
  this._zoom = opt.zoom;
  this.onPreLoad = opt.onPreLoad;
  this.onLoad = opt.onLoad;
  this.onError = opt.onError;
  this._LOAD = $$F.bind(function() {
 this.onLoad();
 this._load();
 this.reset();
 this._img.style.visibility = "visible";
 }, this);
 $$CE.fireEvent(this, "init");
 },
 //设置默认属性
 _setOptions: function(options) {
  this.options = { //默认值
  mode: "css3|filter|canvas",
  zoom: .1, //缩放比率
  onPreLoad: function() {}, //图片加载前执行
  onLoad: function() {}, //图片加载后执行
  onError: function(err) {} //出错时执行
  };
  return $$.extend(this.options, options || {});
 },
 //模式设置
 _initMode: function() {
 var modes = ImageTrans.modes;
 this._support = $$A.some(this.options.mode.toLowerCase().split("|"), function(mode) {
 mode = modes[mode];
 if (mode && mode.support) {
 mode.init && (this._init = mode.init); //初始化执行程序
 mode.load && (this._load = mode.load); //加载图片执行程序
 mode.show && (this._show = mode.show); //变换显示程序
 mode.dispose && (this._dispose = mode.dispose); //销毁程序
 //扩展变换方法
 $$A.forEach(ImageTrans.transforms, function(transform, name) {
 this[name] = function() {
 transform.apply(this, [].slice.call(arguments));
 this._show();
 }
 }, this);
 return true;
 }
 }, this);
 },
 //初始化容器对象
 _initContainer: function() {
 var container = this._container,
 style = container.style,
 position = $$D.getStyle(container, "position");
 this._style = {
 "position": style.position,
 "overflow": style.overflow
 }; //备份样式
 if (position != "relative" && position != "absolute") {
 style.position = "relative";
 }
 style.overflow = "hidden";
 $$CE.fireEvent(this, "initContainer");
 },
 //加载图片
 load: function(src) {
 if (this._support) {
 var img = this._img,
 oThis = this;
 img.onload || (img.onload = this._LOAD);
 img.onerror || (img.onerror = function() {
 oThis.onError("err image");
 });
 img.style.visibility = "hidden";
 this.onPreLoad();
 img.src = src;
 }
 },
 //重置
 reset: function() {
 if (this._support) {
 this._x = this._y = 1;
 this._radian = 0;
 this._show();
 }
 },
 //销毁程序
 dispose: function() {
 if (this._support) {
 this._dispose();
 $$CE.fireEvent(this, "dispose");
 $$D.setStyle(this._container, this._style); //恢复样式
 this._container = this._img = this._img.onload = this._img.onerror = this._LOAD = null;
 }
 }
 };
 //变换模式
 ImageTrans.modes = function() {
 var css3Transform; //ccs3变换样式
 //初始化图片对象函数
 function initImg(img, container) {
 $$D.setStyle(img, {
 position: "absolute",
 border: 0,
 padding: 0,
 margin: 0,
 width: "auto",
 height: "auto", //重置样式
 visibility: "hidden" //加载前隐藏
 });
 container.appendChild(img);
 }
 //获取变换参数函数
 function getMatrix(radian, x, y) {
 var Cos = Math.cos(radian),
 Sin = Math.sin(radian);
 return {
 M11: Cos * x,
 M12: -Sin * y,
 M21: Sin * x,
 M22: Cos * y
 };
 }
 return {
 css3: { //css3设置
 support: function() {
 var style = document.createElement("div").style;
 return $$A.some(
 ["transform", "MozTransform", "webkitTransform", "OTransform"],
 function(css) {
 if (css in style) {
 css3Transform = css;
 return true;
 }
 });
 }(),
 init: function() {
 initImg(this._img, this._container);
 },
 load: function() {
 var img = this._img;
 $$D.setStyle(img, { //居中
 top: (this._clientHeight - img.height) / 2 + "px",
 left: (this._clientWidth - img.width) / 2 + "px",
 visibility: "visible"
 });
 },
 show: function() {
 var matrix = getMatrix(this._radian, this._y, this._x);
 //设置变形样式
 this._img.style[css3Transform] = "matrix(" + matrix.M11.toFixed(16) + "," + matrix.M21.toFixed(16) + "," + matrix.M12.toFixed(16) + "," + matrix.M22.toFixed(16) + ", 0, 0)";
 },
 dispose: function() {
 this._container.removeChild(this._img);
 }
 },
 filter: { //滤镜设置
 support: function() {
 return "filters" in document.createElement("div");
 }(),
 init: function() {
 initImg(this._img, this._container);
 //设置滤镜
 this._img.style.filter = "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand')";
 },
 load: function() {
 this._img.onload = null; //防止ie重复加载gif的bug
 this._img.style.visibility = "visible";
 },
 show: function() {
 var img = this._img;
 //设置滤镜
 $$.extend(
 img.filters.item("DXImageTransform.Microsoft.Matrix"),
 getMatrix(this._radian, this._y, this._x)
 );
 //保持居中
 img.style.top = (this._clientHeight - img.offsetHeight) / 2 + "px";
 img.style.left = (this._clientWidth - img.offsetWidth) / 2 + "px";
 },
 dispose: function() {
 this._container.removeChild(this._img);
 }
 },
 canvas: { //canvas设置
 support: function() {
 return "getContext" in document.createElement('canvas');
 }(),
 init: function() {
 var canvas = this._canvas = document.createElement('canvas'),
 context = this._context = canvas.getContext('2d');
 //样式设置
 $$D.setStyle(canvas, {
 position: "absolute",
 left: 0,
 top: 0
 });
 canvas.width = this._clientWidth;
 canvas.height = this._clientHeight;
 this._container.appendChild(canvas);
 },
 show: function() {
 var img = this._img,
 context = this._context,
 clientWidth = this._clientWidth,
 clientHeight = this._clientHeight;
 //canvas变换
 context.save();
 context.clearRect(0, 0, clientWidth, clientHeight); //清空内容
 context.translate(clientWidth / 2, clientHeight / 2); //中心坐标
 context.rotate(this._radian); //旋转
 context.scale(this._y, this._x); //缩放
 context.drawImage(img, -img.width / 2, -img.height / 2); //居中画图
 context.restore();
 },
 dispose: function() {
 this._container.removeChild(this._canvas);
 this._canvas = this._context = null;
 }
 }
 };
 }();
 //变换方法
 ImageTrans.transforms = {
 //垂直翻转
 vertical: function() {
 this._radian = Math.PI - this._radian;
 this._y *= -1;
 },
 //水平翻转
 horizontal: function() {
 this._radian = Math.PI - this._radian;
 this._x *= -1;
 },
 //根据弧度旋转
 rotate: function(radian) {
 this._radian = radian;
 },
 //向左转90度
 left: function() {
 this._radian -= Math.PI / 2;
 },
 //向右转90度
 right: function() {
 this._radian += Math.PI / 2;
 },
 //根据角度旋转
 rotatebydegress: function(degress) {
 this._radian = degress * Math.PI / 180;
 },
 //缩放
 scale: function() {
 function getZoom(scale, zoom) {
 return scale > 0 && scale > -zoom ? zoom :
 scale < 0 && scale < zoom ? -zoom : 0;
 }
 return function(zoom) {
 if (zoom) {
 var hZoom = getZoom(this._y, zoom),
 vZoom = getZoom(this._x, zoom);
 if (hZoom && vZoom) {
 this._y += hZoom;
 this._x += vZoom;
 }
 }
 }
 }(),
 //放大
 zoomin: function() {
 this.scale(Math.abs(this._zoom));
 },
 //缩小
 zoomout: function() {
 this.scale(-Math.abs(this._zoom));
 }
 };
 //拖动旋转
 ImageTrans.prototype._initialize = (function() {
 var init = ImageTrans.prototype._initialize,
 methods = {
 "init": function() {
 this._mrX = this._mrY = this._mrRadian = 0;
 this._mrSTART = $$F.bind(start, this);
 this._mrMOVE = $$F.bind(move, this);
 this._mrSTOP = $$F.bind(stop, this);
 },
 "initContainer": function() {
 $$E.addEvent(this._container, "mousedown", this._mrSTART);
 },
 "dispose": function() {
 $$E.removeEvent(this._container, "mousedown", this._mrSTART);
 this._mrSTOP();
 this._mrSTART = this._mrMOVE = this._mrSTOP = null;
 }
 };
 //开始函数
 function start(e) {
 var rect = $$D.clientRect(this._container);
 this._mrX = rect.left + this._clientWidth / 2;
 this._mrY = rect.top + this._clientHeight / 2;
 this._mrRadian = Math.atan2(e.clientY - this._mrY, e.clientX - this._mrX) - this._radian;
 $$E.addEvent(document, "mousemove", this._mrMOVE);
 $$E.addEvent(document, "mouseup", this._mrSTOP);
 if ($$B.ie) {
 var container = this._container;
 $$E.addEvent(container, "losecapture", this._mrSTOP);
 container.setCapture();
 } else {
 $$E.addEvent(window, "blur", this._mrSTOP);
 e.preventDefault();
 }
 };
 //拖动函数
 function move(e) {
 this.rotate(Math.atan2(e.clientY - this._mrY, e.clientX - this._mrX) - this._mrRadian);
 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
 };
 //停止函数
 function stop() {
 $$E.removeEvent(document, "mousemove", this._mrMOVE);
 $$E.removeEvent(document, "mouseup", this._mrSTOP);
 if ($$B.ie) {
 var container = this._container;
 $$E.removeEvent(container, "losecapture", this._mrSTOP);
 container.releaseCapture();
 } else {
 $$E.removeEvent(window, "blur", this._mrSTOP);
 };
 };
 return function() {
 var options = arguments[1];
 if (!options || options.mouseRotate !== false) {
 //扩展钩子
 $$A.forEach(methods, function(method, name) {
 $$CE.addEvent(this, name, method);
 }, this);
 }
 init.apply(this, arguments);
 }
 })();
 //滚轮缩放
 ImageTrans.prototype._initialize = (function() {
 var init = ImageTrans.prototype._initialize,
 mousewheel = $$B.firefox ? "DOMMouseScroll" : "mousewheel",
 methods = {
 "init": function() {
 this._mzZoom = $$F.bind(zoom, this);
 },
 "initContainer": function() {
 $$E.addEvent(this._container, mousewheel, this._mzZoom);
 },
 "dispose": function() {
 $$E.removeEvent(this._container, mousewheel, this._mzZoom);
 this._mzZoom = null;
 }
 };
 //缩放函数
 function zoom(e) {
 this.scale((
 e.wheelDelta ? e.wheelDelta / (-120) : (e.detail || 0) / 3
 ) * Math.abs(this._zoom));
 e.preventDefault();
 };
 return function() {
 var options = arguments[1];
 if (!options || options.mouseZoom !== false) {
 //扩展钩子
 $$A.forEach(methods, function(method, name) {
 $$CE.addEvent(this, name, method);
  }, this);
  }
  init.apply(this, arguments);
 }
 })();
 </script>
 <style>
 #idContainer {
 border: 1px solid red;
 width: 1000px;
 height: 500px;
 background: black center no-repeat;
 margin: 0 auto;
 }

 input {
 margin: 10px;
 padding: 10px;
 border: 1px solid red;
 background: yellow;
 color: green;
 font-size: 16px;
 }

 #idSrc {
 width: auto;
 }
 </style>

 <div id="idContainer"></div>
 <input id="idLeft" value="向左旋转" type="button" />
 <input id="idRight" value="向右旋转" type="button" />
 <input id="idVertical" value="垂直翻转" type="button" />
 <input id="idHorizontal" value="水平翻转" type="button" />
 <input id="idReset" value="重置" type="button" />
 <input id="idCanvas" value="使用Canvas" type="button" />
 <input id="idSrc" value="img/07.jpg" type="text" />
 <input id="idLoad" value="换图" type="button" />
 <script>
 (function() {
 var container = $$("idContainer"),
 src = "img/7.jpg",
 options = {
 onPreLoad: function() {
 container.style.backgroundImage = "url('http://images.cnblogs.com/cnblogs_com/cloudgamer/169629/o_loading.gif')";
 },
 onLoad: function() {
 container.style.backgroundImage = "";
 },
 onError: function(err) {
 container.style.backgroundImage = "";
 alert(err);
 }
 },
 it = new ImageTrans(container, options);
 it.load(src);
 //垂直翻转
 $$("idVertical").onclick = function() {
  it.vertical();
  }
  //水平翻转
 $$("idHorizontal").onclick = function() {
 it.horizontal();
 }
 //左旋转
 $$("idLeft").onclick = function() {
  it.left();
  }
  //右旋转
 $$("idRight").onclick = function() {
 it.right();
 }
 //重置
 $$("idReset").onclick = function() {
  it.reset();
  }
  //换图
 $$("idLoad").onclick = function() {
 it.load($$("idSrc").value);
 }
 //Canvas
 $$("idCanvas").onclick = function() {
  if (this.value == "默认模式") {
  this.value = "使用Canvas";
  delete options.mode;
  } else {
  this.value = "默认模式";
  options.mode = "canvas";
  }
  it.dispose();
  it = new ImageTrans(container, options);
  it.load(src);
 }
 })()
 </script>

 </body>

</html>

abc.js

eval(function(p, a, c, k, e, r) {
 e = function(c) {
 return (c < 62 ? '' : e(parseInt(c / 62))) + ((c = c % 62) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
 };
 if ('0'.replace(0, e) == 0) {
 while (c--) r[e(c)] = k[c];
 k = [function(e) {
 return r[e] || e
 }];
 e = function() {
 return '([3-59cf-hj-mo-rt-yCG-NP-RT-Z]|[12]\\w)'
 };
 c = 1
 };
 while (c--)
 if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
 return p
}('4 $$,$$B,$$A,$$F,$$D,$$E,$$CE,$$S;(3(1K){4 O,B,A,F,D,E,CE,S;O=3(id){5"2f"==1L id?G

以上就是js代码实现图片旋转、鼠标滚轮缩放、镜像、切换图片等效果的代码,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
XP折叠菜单&amp;仿QQ2006菜单
Dec 16 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
Mar 18 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
jQuery中live方法的重复绑定说明
Oct 21 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
js 将json字符串转换为json对象的方法解析
Nov 13 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
Aug 24 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Dec 14 Javascript
JavaScript简单拖拽效果(1)
May 17 Javascript
详解用vue.js和laravel实现微信支付
Jun 23 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
js中的 || 与 &amp;&amp; 运算符详解
May 24 Javascript
理解JavaScript中Promise的使用
Jan 18 #Javascript
你不知道的高性能JAVASCRIPT
Jan 18 #Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 #Javascript
jQuery实现多级联动下拉列表查询框
Jan 18 #Javascript
jquery validate表单验证的基本用法入门
Jan 18 #Javascript
jQuery添加删除DOM元素方法详解
Jan 18 #Javascript
AngularJS仿苹果滑屏删除控件
Jan 18 #Javascript
You might like
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
Python实现统计文本文件字数的方法
2017/05/05 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
Numpy中的mask的使用
2018/07/21 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
新员工培训个人的自我评价
2013/10/09 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
演讲主持词
2014/03/18 职场文书
股东协议书
2014/04/14 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
2014年民警工作总结
2014/11/25 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
预备党员转正意见
2015/06/01 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL