zoukankan      html  css  js  c++  java
  • js中实现图片拖动覆盖面积超过一半相交换的算法实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>图片交换</title>
    <style type="text/css">
    .all{
    position:relative;
    height:600px;
    800px;

    margin:0 auto;

    }
    .top{
    position:relative;


    800px;
    height:200px;



    }
    .center{
    position:relative;

    800px;
    height:200px;



    }
    .bottom{
    position:relative;


    800px;
    height:200px;




    }
    .top1{
    position:absolute;
    left:0px;
    top:0px;
    200px;
    height:200px;
    background-color:#00CC66;
    float:left;
    background-image:url(1.jpg);


    }
    .top2{
    position:absolute;
    left:200px;
    top:0px;
    200px;
    height:200px;
    background-color:#6600FF;
    float:left;
    background-image:url(2.jpg);


    }
    .top3{
    position:absolute;
    left:400px;
    top:0px;
    200px;
    height:200px;
    background-color:#FF00FF;
    float:left;
    background-image:url(3.jpg);


    }
    .top4{
    position:absolute;
    left:600px;
    top:0px;
    200px;
    height:200px;
    background-color:#66FF00;
    float:left;
    background-image:url(4.jpg);


    }
    .center1{
    position:absolute;
    left:0px;
    top:0px;
    200px;
    height:200px;
    background-color:#000000;
    float:left;
    background-image:url(5.jpg);


    }
    .center2{
    position:absolute;
    left:200px;
    top:0px;
    200px;
    height:200px;
    background-color:#6600CC;
    float:left;
    background-image:url(6.jpg);


    }
    .center3{
    position:absolute;
    left:400px;
    top:0px;
    200px;
    height:200px;
    background-color:#666666;
    float:left;
    background-image:url(7.jpg);


    }
    .center4{
    position:absolute;
    left:600px;
    top:0px;
    200px;
    height:200px;
    background-color:#CCCC33;
    float:left;
    background-image:url(8.jpg);


    }
    .bottom1{
    position:absolute;
    left:0px;
    top:0px;
    200px;
    height:200px;
    background-color:#CCCC33;
    float:left;
    background-image:url(9.jpg);

    }
    .bottom2{
    position:absolute;
    left:200px;
    top:0px;
    200px;
    height:200px;
    background-color:#FFFF00;
    float:left;
    background-image:url(10.jpg);

    }
    .bottom3{
    position:absolute;
    left:400px;
    top:0px;
    200px;
    height:200px;
    background-color:#00CC00;
    float:left;
    background-image:url(11.jpg);


    }
    .bottom4{
    position:absolute;
    left:600px;
    top:0px;
    200px;
    height:200px;
    background-color:#CC33FF;
    float:left;
    background-image:url(12.jpg);

    }

    </style>
    </head>

    <body>
    <div class="all">
    <div class="top">
    <div class="top1" id="top11"></div>
    <div class="top2" id="top22"></div>
    <div class="top3" id="top33"></div>
    <div class="top4" id="top44"></div>
    </div>
    <div class="center">
    <div class="center1" id="center11"></div>
    <div class="center2" id="center22"></div>
    <div class="center3" id="center33"></div>
    <div class="center4" id="center44"></div>
    </div>
    <div class="bottom">
    <div class="bottom1" id="buttom11"></div>
    <div class="bottom2" id="buttom22"></div>
    <div class="bottom3" id="buttom33"></div>
    <div class="bottom4" id="buttom44"></div>
    </div>
    </div>
    <script type="text/javascript">
    var tx=0,ty=0;
    var x=0,y=0;
    var isdrag=false;
    var objectPic;
    var objectPicId;
    var replacedObject;
    var replacedObjectId;
    //保留对象的原始坐标
    var objectOldX,objectOldY;
    //设置显示的优先级
    var indexFlag=1;
    //对象的坐标
    var relativeX,relativeY;
    //移动方向的div中点坐标;
    var centerX,centerY;
    //重定位div的坐标,此函数有错误待修改
    function change(){
    objectPic.style.position="fixed";

    objectPic.style.zIndex=indexFlag+1;
    indexFlag++;
    objectPic.style.left=centerX-100+274.5+"px";
    objectPic.style.top=centerY-100+8+"px";

    selectreplacedObject();

    objectPic.setAttribute("id",replacedObjectId);
    replacedObject=document.getElementById(replacedObjectId);
    replacedObject.style.position="fixed";

    replacedObject.style.zIndex=indexFlag+1;
    replacedObject.setAttribute("id",objectPicId);
    indexFlag++;
    replacedObject.style.left=objectOldX+274.5+"px";
    replacedObject.style.top=objectOldY+8+"px";



    }
    function noChange(){



    objectPic.style.left=tx+"px";
    objectPic.style.top=0+"px";




    }
    function selectreplacedObject(){
    if(centerY==100){
    if(centerX==100){
    replacedObjectId="top11";
    }else{
    if(centerX==300){
    replacedObjectId="top22";
    }else{
    if(centerX==500){
    replacedObjectId="top33";
    }else{
    replacedObjectId="top44";
    }
    }
    }
    }else{
    if(centerY==300){
    if(centerX==100){
    replacedObjectId="center11";
    }else{
    if(centerX==300){
    replacedObjectId="center22";
    }else{
    if(centerX==500){
    replacedObjectId="center33";
    }else{
    replacedObjectId="center44";
    }
    }
    }
    }else{
    if(centerX==100){
    replacedObjectId="bottom11";
    }else{
    if(centerX==300){
    replacedObjectId="bottom22";
    }else{
    if(centerX==500){
    replacedObjectId="bottom33";
    }else{
    replacedObjectId="bottom44";
    }
    }
    }
    }

    }//配对最外边的else

    }
    //此方法用于判断两个div的覆盖面积是否超过一半;
    function isChange(){
    var distanceX=-Math.abs(relativeX+100-centerX);
    var distanceY=-Math.abs(relativeY+100-centerY);
    var flag=(distanceX+200)*(distanceY+200);

    if(flag>200*200*0.5){
    return true;
    }else{
    return false;
    }
    }
    //此方法用来获得图片的移动方向;
    function selectPoint(pointX,pointY){
    var minX,minY;
    var maxX,maxY;

    var i,j;
    minX=pointX-100;
    minY=pointY-100;
    maxX=pointX+100;
    maxY=pointY+100;


    for(i=Math.round(minX);i<maxX;i++){
    if((i%100==0)&&(i%200==100)){
    centerX=i;
    break;
    }

    }

    if(centerX==i){
    for(j=Math.round(minY);j<maxY;j++){
    if((j%100==0)&&(j%200==100)){
    centerY=j;
    break;
    }

    }
    }

    return false;

    }
    function mousedown(e){
    var targetPic=e.target;
    var strClassName=targetPic.className;
    if(strClassName=="top1"||strClassName=="top2"||strClassName=="top3"||strClassName=="top4"||strClassName=="center1"||strClassName=="center2"||strClassName=="center3"||strClassName=="center4"||strClassName=="bottom1"||strClassName=="bottom2"||strClassName=="bottom3"||strClassName=="bottom4"){
    selectMouse(e,strClassName);
    return false;

    }

    }
    function moveMouse(e){

    if(isdrag){

    objectPic.style.left=tx+e.clientX-x+"px";

    objectPic.style.top =ty+e.clientY-y+"px";

    //获得对象的坐标
    relativeX=objectPic.getBoundingClientRect().left-274.5;

    relativeY=objectPic.getBoundingClientRect().top-8;
    selectPoint(relativeX+100,relativeY+100);

    return false;
    }
    }
    function selectMouse(e,param){

    var temPic=e.target;

    var topElement="HTML";
    while(temPic.tagName!=topElement && temPic.className!=param){
    temPic=temPic.parentNode;
    }
    if(temPic.className==param){

    objectPic=temPic;
    objectPic.style.zIndex=indexFlag+1;
    indexFlag++;
    //获得对象的原始坐标
    objectPicId=objectPic.id;
    objectOldX=objectPic.getBoundingClientRect().left-274.5;
    objectOldY=objectPic.getBoundingClientRect().top-8;

    if(parseInt(objectPic.style.left+0)==0){
    tx=objectPic.getBoundingClientRect().left-274.5;

    }else{
    tx=parseInt(objectPic.style.left+0);


    }

    ty=parseInt(objectPic.style.top+0);





    x=e.clientX;
    y=e.clientY;

    isdrag=true;
    document.onmousemove=moveMouse;
    return false;
    }
    }
    function mouseup(){

    isdrag=false;
    var isflag=isChange();
    if(isflag){
    change();
    }else
    {
    noChange();
    }


    }
    document.onmousedown = mousedown;
    document.onmouseup=mouseup;
    </script>
    </body>
    </html>

  • 相关阅读:
    Flutter form 的表单 input
    FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮
    Flutter 中的常见的按钮组件 以及自 定义按钮组件
    Drawer 侧边栏、以及侧边栏内 容布局
    AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换 通过TabController 定义TabBar
    清空路由 路由替换 返回到根路由
    应对ubuntu linux图形界面卡住的方法
    [转] 一块赚零花钱
    [转]在树莓派上搭建LAMP服务
    ssh保持连接
  • 原文地址:https://www.cnblogs.com/moonfans/p/2997954.html
Copyright © 2011-2022 走看看