首页 > 代码库 > 图片剪切效果
图片剪切效果
第一篇博文,把今天写的一个实现图片剪切效果的JS脚本发上来
基本思路:
三层结构,第一层为透明度是0.7的图片,第二层为正常的图片,第三层使用一个DIV作为选取框,采用CSS中的绝对定位进行覆盖
HTML代码
<div id="box"> <img id="img-1" src="imgs/cat-1.jpg"/> <img id="img-2" src="imgs/cat-2.jpg"/> <div id="main"> <div class="minDiv left-top" id="leftTop"></div> <div class="minDiv top" id="top"></div> <div class="minDiv right-top" id="rightTop"></div> <div class="minDiv right" id="right"></div> <div class="minDiv right-bottom" id="rightBottom"></div> <div class="minDiv bottom" id="bottom"></div> <div class="minDiv left-bottom" id="leftBottom"></div> <div class="minDiv left" id="left"></div> </div>
</div>
CSS代码
body{background-color:#333;}#box{width:522px;height:595px;margin:5px auto;position:relative;}#img-1{position:absolute;left:0;top:0;opacity:0.7;}#img-2{position:absolute;top:0;left:0;clip:rect(0 200px 200px 0);}#main{width:200px;height:200px;border:1px solid #FFF;cursor:move;position:absolute;top:0;left:0;}.minDiv{width:8px;height:8px;background-color:#996633;position:absolute;}.left-top{top:-4px;left:-4px;cursor:nw-resize;}.top{top:-4px;left:50%;margin-left:-4px;cursor:n-resize;}.right-top{top:-4px;right:-4px;cursor:ne-resize;}.right{top:50%;margin-top:-4px;right:-4px;cursor:e-resize;}.right-bottom{bottom:-4px;right:-4px;cursor:se-resize;}.bottom{bottom:-4px;left:50%;margin-left:-4px;cursor:s-resize;}.left-bottom{bottom:-4px;left:-4px;cursor:sw-resize;}.left{left:-4px;top:50%;margin-top:-4px;cursor:w-resize;}
JS代码
function $(id){ //通过id获取元素 return document.getElementById(id); } function getPosition(node){ //获取元素距离视窗的left和top值 var left=node.offsetLeft; var top=node.offsetTop; var parent=node.offsetParent; //获取元素的父元素 while(parent!=null){ left+=parent.offsetLeft; top+=parent.offsetTop; parent=parent.offsetParent; } return {"left":left,"top":top}; //采用对象的形式返回元素距离视窗的left和top值 } function setChoice(mainDiv){ // 设置选中区域高亮 var top=mainDiv.offsetTop; var right=mainDiv.offsetLeft+mainDiv.offsetWidth; var bottom=mainDiv.offsetTop+mainDiv.offsetHeight; var left=mainDiv.offsetLeft; var img_2=$("img-2"); img_2.style.clip="rect("+top+"px "+right+"px "+bottom+"px "+left+"px)" } window.onload=function( ){ document.onselectstart=function(){return false;} //禁止图片被选中 var mainDiv=$("main"); var boxDiv=$("box");//获取id为box的元素 var boxLeft=getPosition(boxDiv).left;//获取id为box的元素距离视窗左边的距离 var boxTop=getPosition(boxDiv).top;//获取id为box的元素距离视窗顶部的距离 //获取id为box的元素的宽度和高度 var boxWidth=boxDiv.offsetWidth; var boxHeight=boxDiv.offsetHeight; var initialX,initialY,moveOffsetX,moveOffsetY; var ifMouseDown=false; var contact=""; //选取框变化相关代码用函数封装 function upMove(event){ // 选取框向上变化 var y=event.clientY; //判断鼠标的clientY是否在box元素上面 if( y>boxTop ){ var mainY=getPosition(mainDiv).top; var addHeight=mainY-y; var heightBefore=mainDiv.offsetHeight-2; mainDiv.style.height=heightBefore+addHeight+"px"; main.style.top=main.offsetTop-addHeight+"px"; } } function rightMove(event){ // 选取框向右变化 //clientX,clientY分别获取鼠标距离视窗的x,y坐标 var x=event.clientX; //判断clientX是否在box元素的右边 if( x<boxLeft+boxWidth ){ var widthBefore=mainDiv.offsetWidth-2; // 获取元素原先的宽度,注意offsetWidth会包含边框 var addWidth=x-getPosition(mainDiv).left-widthBefore; console.log(addWidth); mainDiv.style.width=widthBefore+addWidth+"px"; } } function downMove(event){ // 选取框向下变化 var y=event.clientY; //判断clientY是否在box元素的下面 if( y<boxTop+boxHeight ){ var mainY=getPosition(mainDiv).top; var heightBefore=mainDiv.offsetHeight-2; var addHeight=y-heightBefore-mainY; mainDiv.style.height=heightBefore+addHeight+"px"; } } function leftMove(event){ var x=event.clientX; //判断clientX是否在box元素的左边 if( x>boxLeft ){ var mainX=getPosition(mainDiv).left; var addWidth=mainX-x; var widthBefore=mainDiv.offsetWidth-2; mainDiv.style.width=widthBefore+addWidth+"px"; mainDiv.style.left=mainDiv.offsetLeft-addWidth+"px"; } } //mainDiv元素移动的函数 function Move(event){ var moveX=0; var moveY=0; var moveX=event.clientX-initialX; var moveY=event.clientY-initialY; if( ifMouseDown ){ moveX=event.clientX-moveOffsetX; moveY=event.clientY-moveOffsetY; console.log(moveX); if( mainDiv.offsetLeft+moveX>0&&mainDiv.offsetWidth+moveX<boxDiv.offsetWidth){ mainDiv.style.left=moveX+"px"; } if( mainDiv.offsetTop+moveY>0&&mainDiv.offsetHeight+moveY<boxDiv.offsetHeight){ mainDiv.style.top=moveY+"px"; } } } //鼠标在8个触点上面的按下事件 var arr_minDiv=mainDiv.getElementsByTagName("div");//获取所有的minDiv元素 var length=arr_minDiv.length; for(var i=0;i<length;i++){ arr_minDiv[i].onmousedown=function(event){ event.stopPropagation(); ifMouseDown=true; contact=this.id+"_minDiv"; } } //鼠标在mainDiv上面的按下事件 mainDiv.onmousedown=function(event){ initialX=event.clientX;//获取鼠标按下时的横坐标 initialY=event.clientY;//获取鼠标按下时的纵坐标 moveOffsetX=initialX-mainDiv.offsetLeft; moveOffsetY=initialY-mainDiv.offsetTop; ifMouseDown=true; contact="mainDiv"; } //鼠标松开事件 window.onmouseup=function(){ ifMouseDown=false; } //鼠标移动事件 window.onmousemove=function( event){ //console.log(ifMouseDown); if( ifMouseDown){ //采用switch代替多层if else switch(contact){ case "right_minDiv": rightMove(event); break; case "top_minDiv": upMove(event); break; case "left_minDiv": leftMove(event); break; case "bottom_minDiv": downMove(event); break; case "leftTop_minDiv": leftMove(event); upMove(event); break; case "rightTop_minDiv": rightMove(event); upMove(event); break; case "rightBottom_minDiv": rightMove(event); downMove(event); break; case "leftBottom_minDiv": leftMove(event); downMove(event); break; //设置mainDiv的移动方式 case "mainDiv": Move(event); break; } setChoice(mainDiv); } } }
开通这个博客没事写写,主要以前端开发为主,当然也有PHP和扯淡
图片剪切效果
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。