图片旋转-水平旋转-垂直旋转

        web开发中,图片的常用的旋转操作处理。

        如图所示:

        冷暖自知一抹茶ck

        css样式:

<style>
	body{padding:10px}
	dl,dt,dd{margin:0;padding:0;}
	.confirm-box canvas{
		transition: transform 0.6s ease-out 0s;
		-moz-transition: transform 0.6s ease-out 0s;
		-webkit-transition: transform 0.6s ease-out 0s;
		-o-transition: transform 0.6s ease-out 0s;
	}
	.rotateX{
		transform: rotateY(180deg);
		-moz-transform: rotateY(180deg);
		-o-transform: rotateY(180deg);
		-webkit-transform: perspective(2000px) translateZ(-1px) rotateY(180deg);
	}
	.rotateY{
		transform: rotateX(180deg);
		-moz-transform: rotateX(180deg);
		-o-transform: rotateX(180deg);
		-webkit-transform: perspective(2000px) translateZ(-1px) rotateX(180deg);
	}
	
</style>

        js函数:

<script>
	// rotation

	function rotate(elm, angle, whence) {
      	var p = elm;
      	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;
        	}
        	//alert(canvas.width)
        	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 imgRotate(act, id){
		var box = $('#slide_' + id);

		if(act == 's'){
			rotate(document.getElementById('confirm-img-'+id), 90);
		}

		if(act == 'x'){
			box.find('img, canvas').removeClass('rotateY');
			box.find('img, canvas').toggleClass('rotateX');
		}

		if(act == 'y'){
			box.find('img, canvas').removeClass('rotateX');
			box.find('img, canvas').toggleClass('rotateY');
		}
	}
</script>

        html代码:

<table class="confirm-box">
    <tr>
        <td>
            <div id="slide_1" class="slides" style="display:block;">
                <div class="tools">
		    <input class="rotate-btn" type="button" onclick="imgRotate('s', 1)" value="旋转"/>
	            <input class="rotate-x-btn" type="button" onclick="imgRotate('x', 1)" value="水平翻转">
                    <input class="rotate-y-btn" type="button" onclick="imgRotate('y', 1)" value="垂直翻转">
							(翻转功能需IE10+浏览器)
		</div>
		<img id="confirm-img-1" src="./1.jpg">
	    </div>											
	</td>
    </tr>		
</table>

        

        demo链接:https://pan.baidu.com/s/1qN2pa6hZkU4W2Om-pOCk0w  提取码:qpwi 


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论