让图片旋转任意角度及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 相关文章推荐
该如何加载google-analytics(或其他第三方)的JS
May 13 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
javascript自动改变文字大小和颜色的效果的小例子
Aug 02 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
Dec 24 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
Jul 18 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
面包屑导航详解
Dec 07 Javascript
Angular2整合其他插件的方法
Jan 20 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 Javascript
详解Vuex下Store的模块化拆分实践
Jul 31 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并发访问实例代码
2012/09/06 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
php删除指定目录的方法
2015/04/03 PHP
MSN消息提示类
2006/09/05 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python插入数据到列表的方法
2015/04/30 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
python实现打砖块游戏
2020/02/25 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
Java语言的优势
2015/01/10 面试题
ktv总经理岗位职责
2014/02/17 职场文书
大学三年计划书范文
2014/04/30 职场文书
主题班会演讲稿
2014/05/22 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
文明礼仪倡议书
2015/04/28 职场文书
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
电频谱管理的原则是什么
2022/02/18 无线电
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis