服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用来实现web页面图片移动托拽的代码段

 

以下这段js是主要解决在画面生成image项目,并通过鼠标事件进行脱拽、移动等操作的代码。
<script language="javascript" type="text/javascript">
var top,left;
var src,drag,dir,ope,refer,halfwidth;
var unit=30;

var aryitems,itemnum=10,index,isinit,id,max=23;

function pageload()
{
    document.form1.onsubmit=onsubmit;

    aryitems=new array(itemnum);
    top=document.getelementbyid("table").getclientrects()[0].top;
    left=document.getelementbyid("table").getclientrects()[0].left;
   
    if(document.getelementbyid("__gantt").value!=null&&document.getelementbyid("__gantt").value!="")
    {
        var gantt=document.getelementbyid("__gantt").value;
        var array=gantt.split(";");
        var length=array.length-1;
        var start,width,item;
       
        for(index=0;index<length;index++)
        {
            item=array[index].split(",");
            start=item[0];
            width=item[1];
           
            id="item"+index;
            aryitems[index]=id;
           
            var track = document.createelement("img");
            track.setattribute("id",id);
            track.setattribute("src","blue.gif");

            document.body.appendchild(track);
            document.getelementbyid(id).style.position="absolute";
            document.getelementbyid(id).style.top=top+unit*index;
            document.getelementbyid(id).style.left=left+unit*start;
            document.getelementbyid(id).width=unit*width;
            document.getelementbyid(id).style.zindex=9;
        }
    }
    else
    {
        for(index=0;index<itemnum;index++)
        {
            id="item"+index;
            aryitems[index]=id;
           
            var track = document.createelement("img");
            track.setattribute("id",id);
            track.setattribute("src","blue.gif");

            document.body.appendchild(track);
            document.getelementbyid(id).style.position="absolute";
            document.getelementbyid(id).style.top=top+unit*index;
            document.getelementbyid(id).style.left=left+unit*index;
            document.getelementbyid(id).width=unit;
            document.getelementbyid(id).style.zindex=9;
        }
    }
    drag=false;
    left=document.getelementbyid(aryitems[0]).getclientrects()[0].left;
}

function ondrag()
{
    if(event.srcelement.tagname!="img"&&!drag)
    {
        if(event.srcelement.id=="btntrim")
        {
//            ontrim();
        }
    }
    else
    {
        if(!drag)
        {
            src=event.srcelement;
            halfwidth=src.width/2;
            drag=true;
           
            //  方向の判断
            if(event.clientx<src.getclientrects()[0].left+halfwidth)
            {
                dir="backward";
                refer=src.getclientrects()[0].left+src.width;
            }
            else
            {
                dir="forward";
                refer=src.getclientrects()[0].left;
            }
           
            //  操作の判断:1.移??・2.?s小/??大
            if(event.shiftleft)
            {
                ope="move";
                refer=event.clientx-src.getclientrects()[0].left;
            }
            else
            {
                ope="scale";
            }
        }
        else
        {
            if(ope=="scale")
            {
                var sleft=math.ceil((src.getclientrects()[0].left-left)/unit-1)*unit+left;
                var header=src.getclientrects()[0].left-src.getclientrects()[0].left;
                var tail=src.width-header-math.ceil((src.width-header)/unit)*unit;
                var swidth=math.ceil((src.width-header)/unit)*unit;
                if(header>0)
                {
                    swidth=swidth+unit;
                }
                if(tail>0)
                {
                    swidth=swidth+unit;
                }
                src.style.left=sleft;
                src.width=swidth;
            }
           
            if(ope=="move")
            {
                src.style.left=math.ceil((src.getclientrects()[0].left-left)/unit-1)*unit+left;
            }
           
            drag=false;
            ontrim()
        }
    }
}

function onscale()
{
    if(src!=null&&drag)
    {
        if(ope=="scale")
        {
        //  ?s小/??大の?龊?
            if(dir=="forward")
            {
                if(event.clientx-refer>=unit)
                {
                    src.width=event.clientx-refer;
                }
            }
            else
            {
                if(refer-event.clientx>unit)
                {
                    src.style.left=event.clientx;
                    src.width=refer-src.getclientrects()[0].left;
                }
            }
        }
        else
        {
        //  移?婴??龊? http://www.devdao.com/
            src.style.left=event.clientx-refer;
        }
    }
   
    if(event.srcelement!=null)
    {
        if(event.srcelement.tagname=="img")
        {
            if(event.clientx<event.srcelement.getclientrects()[0].left+unit/2)
            {
                event.srcelement.style.cursor="w-resize";
            }
            else
            {
                event.srcelement.style.cursor="e-resize";
            }
        }
    }
}

function ontrim()
{
    var pre,post;
    for(index=0;index<itemnum-1;index++)
    {
        pre=document.getelementbyid(aryitems[index]);
        post=document.getelementbyid(aryitems[index+1]);
        if(pre.getclientrects()[0].left+pre.width!=post.getclientrects()[0].left)
        {
            post.style.left=pre.getclientrects()[0].left+pre.width-2;
        }
    }
   
    for(index=0;index<itemnum;index++)
    {
        pre=document.getelementbyid(aryitems[index]);
        if(pre.getclientrects()[0].left>=left+unit*max)
        {
            pre.style.left=left+unit*max-2;
            pre.width=unit;
        }
       
        if((pre.getclientrects()[0].left<left+unit*max)&&(pre.getclientrects()[0].left+pre.width>left+unit*max))
        {
            pre.width=left+unit*max-pre.getclientrects()[0].left;
        }
    }
}

function onsubmit()
{
    var t="";
    for(index=0;index<itemnum;index++)
    {
        t=t+((document.getelementbyid(aryitems[index]).getclientrects()[0].left-left)/unit).tostring();
        t=t+",";
        t=t+(document.getelementbyid(aryitems[index]).width/unit).tostring();
        t=t+";";
    }
    document.getelementbyid("__gantt").value=t;
}

document.onmousedown=ondrag;
document.onmousemove=onscale;
</script>
当有一个button做表单提交的时候,会先执行onsubmit代码段。而在服务器端的操作就是把从客户端发送过来的东西原封不动地发挥去,其中可以加入对数据的修改过程,也可以是通过一进入页面就倒入数据而达到生成画面的目的。
    protected sub button1_click()sub button1_click(byval sender as object, byval e as system.eventargs) handles button1.click
        response.write(request.params.item("__gantt") & "<br>")
        dim strgantt as string = request.params.item("__gantt")
        clientscript.registerhiddenfield("__gantt", strgantt)

 

    end sub

    protected sub page_load()sub page_load(byval sender as object, byval e as system.eventargs) handles me.load
        if not ispostback then
            clientscript.registerhiddenfield("__gantt", string.empty)
        end if
    end sub希望对大家有用。

扫描关注微信公众号