亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js實現圖片旋轉的三種方法

2019-11-20 20:50:50
字體:
來源:轉載
供稿:網友
1 使用jQueryRotate.js實現

示例代碼:
復制代碼 代碼如下:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#div1 {
width: 800px;
height: 600px;
background-color: #ff0;
position: absolute;
}
.imgRotate {
width: 100px;
height: 80px;
position: absolute;
top: 50%;
left: 50%;
margin: -40px 0 0 -50px;
}
</style>
</head>
<body>
<div id="div1">
<img id="img1" class="imgRotate" src="http://www.baidu.com/img/logo-yy.gif" />
<input id="input2" type="button" value="btn2"></input>
</div>
</body>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jQueryRotate.js"></script>
<script type="text/javascript">
var num = 0;
$("#input2").click(function(){
num ++;
$("#img1").rotate(90*num);
});
</script>
</html>

測試結果:chrome下效果正常,旋轉后img對象仍為img對象;ie8下效果正常,但旋轉后img對象變為下面對象,由于對象變化,若旋轉后仍按原來方法獲取img對象,則會報js錯誤。欲獲取image對象,可根據class獲取。如果圖像旋轉后,不進行其它操作,則可用此方法。若進行其它操作,如放大、縮小圖像,則此方法實現較復雜。
復制代碼 代碼如下:

<span ...>
<rvml:group class="rvml"...>
<rvml:image class="rvml".../>
</rvml:group>
</span>

2 使用Microsoft提供的Matrix對象

示例代碼:
復制代碼 代碼如下:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#div1 {
width: 800px;
height: 600px;
background-color: #ff0;
position: absolute;
}
.imgRotate {
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
}
#imgRotate {
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
}
</style>
</head>
<body>
<div id="div1">
<img id="img1" class="imgRotate" src="http://www.baidu.com/img/logo-yy.gif" />
<input id="input1" type="button" value="btn1"></input>
</div>
</body>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function rotate(id,angle,whence) {
var p = document.getElementById(id);

// 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.cos(rotation);
var sintheta = Math.sin(rotation);

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);
}

function rotateRight(id,angle) {
rotate(id,angle==undefined?90:angle);
}

function rotateLeft(id,angle) {
rotate(id,angle==undefined?-90:-angle);
}
$("#input1").click(function(){
$("img.imgRotate").attr("id","imgRotate");
rotateLeft("imgRotate",90);
$("#imgRotate").attr("top","50%");
$("#imgRotate").attr("left","50%");
$("#imgRotate").attr("margin","-50px 0 0 -50px");
});
</script>
</html>

測試結果:chrome下效果正常,但旋轉后img對象變為canvas對象;ie8下效果正常,旋轉后img對象仍為img對象。Matrix()參數較多,使用時需較多計算。

3 使用Microsoft提供的BasicImage對象

示例代碼:
復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<img id="image" src="http://www.baidu.com/img/logo-yy.gif" />
<input id="input2" type="button" value="btn2"></input>
</body>
<script type="text/javascript" src="jquery.min.js"></script>

<script type="text/javascript">
var num = 0;
$("#input2").click(function(){
num = (num + 1) % 4;
document.getElementById('image').style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+num+')';
});
</script>
</html>

測試結果:chrome下不能旋轉;ie8下效果正常,旋轉后img對象仍為img對象。BasicImage()僅一個參數。

查看這三種方法的代碼會發現,本質上是一種解決方案:chrome下使用canvas對象實現,ie8下使用VML或者Matrix()或BasicImage()實現。本人近期改造一個組件:其中涉及到旋轉、放大圖片,由于jQueryRotate.js在ie8下會生成一個新的對象,導致放大圖片前選擇圖片時,需要進行特殊處理。后決定對chrome、ie8分開處理,chrome下使用jQueryRotate實現,ie8下使用BasicImage()實現,保證了代碼的簡潔性和可讀性。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性jizz18性欧美| 亚洲天堂av女优| www.久久久久久.com| 亚洲人成网站999久久久综合| 欧美人与性动交a欧美精品| 日韩欧美在线免费| 亚洲成人1234| 不卡在线观看电视剧完整版| 日韩久久免费视频| 国产精品美女在线观看| 欧美日韩国产二区| 国产97在线视频| 欧美精品电影免费在线观看| 国产欧美精品久久久| 欧美一级bbbbb性bbbb喷潮片| 国产精品欧美在线| 伊人成人开心激情综合网| 日韩免费观看av| 18一19gay欧美视频网站| 社区色欧美激情 | 欧美电影电视剧在线观看| 国产日韩换脸av一区在线观看| 国产精品视频1区| 日韩在线国产精品| 91精品视频在线播放| 欧美日韩在线另类| 国内精品模特av私拍在线观看| 亚洲人成欧美中文字幕| 欧美日韩人人澡狠狠躁视频| 久久久精品久久久久| 欧美丝袜一区二区| 国产欧美日韩中文字幕在线| 91国产在线精品| 韩曰欧美视频免费观看| 国产精品爽爽爽| 国产精品一区二区在线| 26uuu亚洲伊人春色| 国产精品com| 久久久中精品2020中文| 国产一区深夜福利| 亚洲精品狠狠操| 欧美大片免费观看| 欧美最猛黑人xxxx黑人猛叫黄| 国产性色av一区二区| 日本不卡高字幕在线2019| 色综合色综合网色综合| 国产精品中文字幕在线| 久久夜精品香蕉| 亚洲日韩第一页| 国产婷婷色综合av蜜臀av| 国产精品久久久久999| 97福利一区二区| 日韩av电影免费观看高清| 国产欧美欧洲在线观看| 色婷婷综合久久久久| 欧美在线性视频| 欧美激情精品久久久久久变态| xxxxx91麻豆| 日韩久久免费视频| 欧美激情成人在线视频| 91精品在线看| 狠狠综合久久av一区二区小说| 日本国产高清不卡| 日韩电影免费在线观看中文字幕| 国产精品精品久久久| 色先锋久久影院av| 欧美性做爰毛片| 国产精品爽黄69| 国产91精品久久久久久久| 最好看的2019年中文视频| 久久精品免费电影| 国产精品第七影院| 亚洲欧美中文日韩在线v日本| 亚洲在线免费视频| 欧美最猛性xxxx| 亚洲欧洲免费视频| 欧美性高潮床叫视频| 欧美日韩亚洲国产一区| 久久99视频精品| 日本a级片电影一区二区| 欧美一区二区三区免费观看| 国产精品久久久久久久午夜| 欧美福利视频在线| 97高清免费视频| 中国日韩欧美久久久久久久久| 正在播放欧美一区| 国产精品狠色婷| 亚洲成色777777在线观看影院| 国产精品吹潮在线观看| 日本三级韩国三级久久| 国产精品mp4| 秋霞午夜一区二区| 国产精品久久久久av| 欧美性xxxxxx| 久久久成人精品视频| 在线视频免费一区二区| 国产999精品久久久影片官网| 久久精品亚洲精品| 日韩av网站在线| 国产亚洲精品久久| 91av中文字幕| 国产欧美精品一区二区| 亚洲视频综合网| 97视频国产在线| 亚洲男人天堂网| 日韩精品免费看| 亚洲free性xxxx护士hd| 日韩av大片免费看| 中文字幕亚洲欧美日韩高清| 91亚洲精品一区| 国产亚洲欧洲高清一区| 亚洲a∨日韩av高清在线观看| 视频直播国产精品| 国产z一区二区三区| 最近2019中文字幕大全第二页| 国模精品一区二区三区色天香| 国产一区香蕉久久| 久久综合五月天| 亚洲最大激情中文字幕| 欧美影院成年免费版| 亚洲国产欧美一区二区三区久久| 欧美在线视频在线播放完整版免费观看| 韩剧1988免费观看全集| 国产一区二区三区在线视频| 久久成人精品一区二区三区| 日韩欧美亚洲综合| 欧美国产第二页| 成人精品久久一区二区三区| 最近2019中文免费高清视频观看www99| 久久亚洲国产精品成人av秋霞| 久久久影视精品| 97在线精品国自产拍中文| 国产精品久久久久久久久久99| 亚洲爱爱爱爱爱| 在线视频中文亚洲| 91精品久久久久久久久不口人| 成人av电影天堂| 日韩av片免费在线观看| 日韩大片在线观看视频| 红桃视频成人在线观看| 日韩中文字幕在线观看| 青草青草久热精品视频在线网站| 亚洲深夜福利网站| 国产精品a久久久久久| 欧美日韩中国免费专区在线看| 亚洲国产小视频| 一个人看的www久久| 欧美黄色片视频| 97精品视频在线观看| 高清一区二区三区四区五区| 亚洲福利在线视频| 亚洲国产又黄又爽女人高潮的| 亚洲日本中文字幕免费在线不卡| 亚洲视频777| 岛国av午夜精品| 深夜福利91大全| 国产精品人成电影| 久久成人在线视频| 精品人伦一区二区三区蜜桃网站| 国产亚洲精品91在线| 亚洲女人天堂成人av在线| 久久6免费高清热精品| 国产伦精品一区二区三区精品视频| 欧美精品免费在线观看|