JS实现图片旋转的三种方法
1 使用jQueryRotate.js实现
示例代码:
复制代码代码如下:
var num = 0;
$("#input2").click(function(){
num ++;
$("#img1").rotate(90*num);
});
测试结果:chrome下效果正常,旋转后img对象仍为img对象;ie8下效果正常,但旋转后img对象变为下面对象,由于对象变化,若旋转后仍按原来方法获取img对象,则会报js错误。欲获取image对象,可根据class获取。如果图像旋转后,不进行其它操作,则可用此方法。若进行其它操作,如放大、缩小图像,则此方法实现较复杂。
复制代码代码如下:
2 使用Microsoft提供的Matrix对象示例代码:
复制代码代码如下:
#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;
}
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 exp and')";
} 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) + M ath.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.heig ht);
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");
});
测试结果:chrome下效果正常,但旋转后img对象变为canvas对象;ie8下效果正常,旋转后img对象仍为img对象。Matrix()参数较多,使用时需较多计算。
3 使用Microsoft提供的BasicImage对象
示例代码:
复制代码代码如下:
var num = 0;
$("#input2").click(function(){
num = (num + 1) % 4;
document.getElementById('image').style.filter = 'progid:DXImageTransform.Microsof t.BasicImage(rotation='+num+')';
});
测试结果:chrome下不能旋转;ie8下效果正常,旋转后img对象仍为img对象。BasicImage()仅一个参数。
查看这三种方法的代码会发现,本质上是一种解决方案:chrome下使用canvas对象实现,ie8下使用VML或者Matrix()或BasicImage()实现。本人近期改造一个组件:其中涉及到旋转、放大图片,由于jQueryRotate.js在ie8下会生成一个新的对象,导致放大图片前选择图片时,需要进行特殊处理。后决定对chrome、ie8分开处理,chrome下使用jQueryRotate实现,ie8下使用BasicImage()实现,保证了代码的简洁性和可读性。
鼠标点击按钮图片切换+自动切换+左右按钮点击切换效果
鼠标点击按钮图片切换+自动切换+左右按钮点击切换效果 上一次在我的文库中分享了点击按钮,图片左右切换轮播效果代码,今天主要是分享【鼠标点击按钮,图片进行切换+图片自动切换+点击左右按钮图片进行切换的三种效果的组合代码】。 最后的效果如下: Html代码部分:
Css代码部分: *{margin:0px;padding:0px}
js实现图片展示效果
- 1
- 2
- 3
- 4
- 5
DW制作自动切换图js代码
网页图片自动切换js代码 可以自己配置,自己设置每张图片切换的时间间隔,自己设置每张图片的路径(绝对、相对路径都可以)虽然很简单,但是很实用。 ------------------------------------------------------------- 第二种方法: //修改图片的宽度、高度,注意要和下面的一样,修改显示位置
[Web前端技术] javascript实现图片轮播
[Web前端技术] javascript实现图片轮播 图片轮播在我们实际开发的过程中使用的频率非常多在Jquery插件当道的时代,原生js的逻辑性更显得尤为重要,希望一下代码能对各位有所帮助! < !DOCTYPE html> < html lang="en"> < head> < meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < title>JS幻灯代码 < script type="text/javascript"> window.onload = function () { flag = 0; obj1 = document.getElementById("slider"); obj2 = document.getElementsByTagName("li"); obj2[0].style.backgroundColor = "#666666"; //默认被选中颜色 time = setInterval("turn();", 5000); obj1.onmouseover = function () { clearInterval(time); } obj1.onmouseout = function () { time = setInterval("turn();", 6000); } for (var num = 0; num < obj2.length; num++) { obj2[num].onmouseover = function () { turn(this.innerHTML); clearInterval(time); } obj2[num].onmouseout = function () { time = setInterval("turn();", 6000); } } //延迟加载图片,演示的时候,使用本地图片 //上线后请改为二级域名提供的图片地址 document.getElementById("second").src = "images/2.png"; //使用图片宽660,高550 document.getElementById("third").src = "images/3.png"; document.getElementById("four").src = "images/4.png"; } function turn(value) { if (value != null) { flag = value - 2; } if (flag < obj2.length - 1)
JavaScript图片切换特效
教案首页
第4讲JavaScript图片切换特效 一、if else语句(如果,否则) (1)if else结构 其实“if else”的意思和字面意思是一样的,就是“如果”、“否则”。还是让我们来看一个使用if的例子吧。 我们来解释一下这段代码。首先是一个“if”,它后面紧跟着一个括号,括号里则是一个条件,确切地说是一个布尔值。当条件成立的时候,这个值是true,“{}”里的语句将会得到执行;否则这个值是flase,“{}”里的语句将被忽略。 (2)if else嵌套 如果想做更多的判断,可以用if的嵌套,看下面的代码。 第二个if只有在第一个if的条件不成立的时候才有机会执行。 二、JavaScript For 循环 所谓循环,就是重复执行一段代码。 前面我们已经看到了,if else和switch是JavaScript具有了判断的能力,但是电脑的判断能力和人比起来差远了。电脑更擅长一件事情——不停地重复。我们在JavaScript中把这叫做循环。 for语句结构如下: for(初始条件;判断条件;循环后动作){ 循环代码 } 让我们来看一个简单的例子吧:有十个菜鸟报数,“菜鸟1号、菜鸟2号”。有了for循环,很少的代码就可以实现十个菜鸟的报数。