让图片旋转任意角度及JQuery插件使用介绍


Posted in Javascript onMarch 20, 2013

引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度,
例如$("#rotate-image").rotate(45);把这句放在$(document).ready(function(){ });中
就是将id为rotate-image的图片旋转45度。

不过,貌似在Chrome中总是不显示。
唉,找了两个小时,才发现Chrome太坑爹了,没法获取图片的长宽。
解决办法是,把$("#rotate-image").rotate(45);放在
$(window).load(function(){ });中,因为在Chrome中图片在执行$(document).ready(function(){ });中的语句时并没有加载完图片,坑爹啊。

另外可以更方便的通过调用$("选择器").rotateRight()和$("选择器").rotateLeft()来分别向右旋转90度和向左旋转90度。

jquery.rotate.js:

jQuery.fn.rotate = function(angle,whence) { 
var p = this.get(0); 
// we store the angle inside the image tag for persistence 
if (!whence) { 
p.angle = ((p.angle==undefined?0:p.angle) + angle) % 360; 
} else { 
p.angle = angle; 
} 
if (p.angle >= 0) { 
var rotation = Math.PI * p.angle / 180; 
} else { 
var rotation = Math.PI * (360+p.angle) / 180; 
} 
var costheta = Math.round(Math.cos(rotation) * 1000) / 1000; 
var sintheta = Math.round(Math.sin(rotation) * 1000) / 1000; 
//alert(costheta+","+sintheta); 
if (document.all && !window.opera) { 
var canvas = document.createElement('img'); 
canvas.src = p.src; 
canvas.height = p.height; 
canvas.width = p.width; 
canvas.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11="+costheta+",M12="+(-sintheta)+",M21="+sintheta+",M22="+costheta+",SizingMethod='auto expand')"; 
} else { 
var canvas = document.createElement('canvas'); 
if (!p.oImage) { 
canvas.oImage = new Image(); 
canvas.oImage.src = p.src; 
} else { 
canvas.oImage = p.oImage; 
} 
canvas.style.width = canvas.width = Math.abs(costheta*canvas.oImage.width) + Math.abs(sintheta*canvas.oImage.height); 
canvas.style.height = canvas.height = Math.abs(costheta*canvas.oImage.height) + Math.abs(sintheta*canvas.oImage.width); 
var context = canvas.getContext('2d'); 
context.save(); 
if (rotation <= Math.PI/2) { 
context.translate(sintheta*canvas.oImage.height,0); 
} else if (rotation <= Math.PI) { 
context.translate(canvas.width,-costheta*canvas.oImage.height); 
} else if (rotation <= 1.5*Math.PI) { 
context.translate(-costheta*canvas.oImage.width,canvas.height); 
} else { 
context.translate(0,-sintheta*canvas.oImage.width); 
} 
context.rotate(rotation); 
context.drawImage(canvas.oImage, 0, 0, canvas.oImage.width, canvas.oImage.height); 
context.restore(); 
} 
canvas.id = p.id; 
canvas.angle = p.angle; 
p.parentNode.replaceChild(canvas, p); 
} 
jQuery.fn.rotateRight = function(angle) { 
this.rotate(angle==undefined?90:angle); 
} 
jQuery.fn.rotateLeft = function(angle) { 
this.rotate(angle==undefined?-90:-angle); 
}
Javascript 相关文章推荐
动态为事件添加js代码示例
Feb 15 Javascript
javascript Onunload与Onbeforeunload使用小结
Dec 31 Javascript
一个可绑定数据源的jQuery数据表格插件
Jul 17 Javascript
Js event事件在IE、FF兼容性问题
Jan 01 Javascript
一个关于javascript匿名函数的问题分析
Mar 30 Javascript
extjs render 用法介绍
Sep 11 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
Jan 08 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
在vue项目中引入highcharts图表的方法(详解)
Mar 05 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
Vue 全家桶实现移动端酷狗音乐功能
Nov 16 Javascript
jquery在Chrome下获取图片的长宽问题解决
Mar 20 #Javascript
javascript中[]和{}对象使用介绍
Mar 20 #Javascript
javascript中节点的最近的相关节点访问方法
Mar 20 #Javascript
javascript中注册和移除事件的4种方式
Mar 20 #Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 #Javascript
jQuery实现id模糊查询的小例子
Mar 19 #Javascript
JS文本框不能输入空格验证方法
Mar 19 #Javascript
You might like
PHP 之Section与Cookie使用总结
2012/09/14 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
Python yield 小结和实例
2014/04/25 Python
Python读大数据txt
2016/03/28 Python
python中异常捕获方法详解
2017/03/03 Python
在python中bool函数的取值方法
2018/11/01 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
python django生成迁移文件的实例
2019/08/31 Python
Python timeit模块的使用实践
2020/01/13 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
《愚公移山》教学反思
2014/02/20 职场文书
初中生期末评语大全
2014/04/24 职场文书
营销团队口号
2014/06/06 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python