让图片旋转任意角度及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 相关文章推荐
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
May 06 Javascript
利用JS自动打开页面上链接的实现代码
Sep 25 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
Dec 08 Javascript
jQuery选择器基础入门教程
May 10 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 Javascript
JS使用插件cryptojs进行加密解密数据实例
May 11 Javascript
Bootstrap模态框插入视频的实现代码
Jun 25 Javascript
vue使用keep-alive实现数据缓存不刷新
Oct 21 Javascript
Node.js 中使用 async 函数的方法
Nov 20 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 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
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP多维数组排序array详解
2017/11/21 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
Python 流程控制实例代码
2009/09/25 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
python matplotlib库的基本使用
2020/09/23 Python
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
班级文化建设标语
2014/06/23 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
企业安全生产检查制度
2015/08/06 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android