让图片旋转任意角度及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 正则替换 replace(regExp, function)用法
May 22 Javascript
JavaScript定义类或函数的几种方式小结
Jan 09 Javascript
document.execCommand()的用法小结
Jan 08 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
很不错的两款Bootstrap Icon图标选择组件
Jan 28 Javascript
vue2.0 keep-alive最佳实践
Jul 06 Javascript
浅谈webpack 自动刷新与解析
Apr 09 Javascript
bootstrap table实现合并单元格效果
Dec 24 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 Javascript
详解如何在Javascript和Sass之间共享变量
Nov 13 Javascript
javascript canvas时钟模拟器
Jul 13 Javascript
微信小游戏中three.js离屏画布的示例代码
Oct 12 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
php生成动态验证码gif图片
2015/10/19 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
基于jQuery的获取标签名的代码
2012/07/16 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
详解webpack babel的配置
2018/01/09 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
python range实例用法分享
2020/02/06 Python
Python super()函数使用及多重继承
2020/05/06 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
工程业务员工作职责
2013/12/07 职场文书
会计系中文个人求职信
2013/12/24 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
黑白记忆观后感
2015/06/18 职场文书
小学教师教学随笔
2015/08/14 职场文书
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis