Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Drag and drop i pamcenje "premestenih" rezultata

[es] :: Javascript i AJAX :: Drag and drop i pamcenje "premestenih" rezultata

[ Pregleda: 1656 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dejan Dejann
Dejan Djordjevic

Član broj: 120677
Poruke: 19
212.200.223.*



Profil

icon Drag and drop i pamcenje "premestenih" rezultata27.11.2006. u 20:00 - pre 211 meseci
Nasao sam neki script za drag and drop elemenata na stranici, to sve radi ok ali da li krajnji rezultat (kada posetilac rasporedi elemente) moze da ostane zapamcen tj. kada refresuje stranu da se raspored ne vrati na default vec da ostane kako je taj posetilac rasporedio. Kako da napravim neki "kolacic" ili nesto sto ce da pamti korisnikov raspored.

Ovo ide u <head>

Code:
    <style type="text/css">
    body{
        font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;
        margin:0px;
        padding:0px;
        background-image:url('http://www.sajt.com/slika.gif');
        background-repeat:no-repeat;
        padding-top:85px;                    
        overflow:hidden;
        padding-left:10px;
        -moz-user-select:no;
    }
    
    /* Don't change these options */
    #movableNode{
        position:absolute;
    }
    
    #arrDestInditcator{
        position:absolute;
        display:none;
        width:100px;
    }
    /* End options that shouldn't be changed */

    
    #arrangableNodes,#movableNode ul{
        padding-left:0px;
        margin-left:0px;
        margin-top:0px;
        padding-top:0px;
    }
    
    #arrangableNodes li,#movableNode li{
        list-style-type:none;
        cursor:default;
    }

    </style>
    
    <script type="text/javascript">
    /************************************************************************************************************
    (C) www.dhtmlgoodies.com, October 2005
    
    This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.    
    
    Terms of use:
    You are free to use this script as long as the copyright message is kept intact. However, you may not
    redistribute, sell or repost it without our permission.
    
    Thank you!
    
    www.dhtmlgoodies.com
    Alf Magne Kalleland
    
    ************************************************************************************************************/    
    
    var offsetYInsertDiv = -3; // Y offset for the little arrow indicating where the node should be inserted.
    if(!document.all)offsetYInsertDiv = offsetYInsertDiv - 7;     // No IE

    
    var arrParent = false;
    var arrMoveCont = false;
    var arrMoveCounter = -1;
    var arrTarget = false;
    var arrNextSibling = false;
    var leftPosArrangableNodes = false;
    var widthArrangableNodes = false;
    var nodePositionsY = new Array();
    var nodeHeights = new Array();
    var arrInsertDiv = false;
    var insertAsFirstNode = false;
    var arrNodesDestination = false;
    function cancelEvent()
    {
        return false;
    }
    function getTopPos(inputObj)
    {
        
      var returnValue = inputObj.offsetTop;
      while((inputObj = inputObj.offsetParent) != null){
          returnValue += inputObj.offsetTop;
      }
      return returnValue;
    }
    
    function getLeftPos(inputObj)
    {
      var returnValue = inputObj.offsetLeft;
      while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
      return returnValue;
    }
        
    function clearMovableDiv()
    {
        if(arrMoveCont.getElementsByTagName('LI').length>0){
            if(arrNextSibling)arrParent.insertBefore(arrTarget,arrNextSibling); else arrParent.appendChild(arrTarget);            
        }
        
    }
    
    function initMoveNode(e)
    {
        clearMovableDiv();
        if(document.all)e = event;
        arrMoveCounter = 0;
        arrTarget = this;
        if(this.nextSibling)arrNextSibling = this.nextSibling; else arrNextSibling = false;
        timerMoveNode();
        arrMoveCont.parentNode.style.left = e.clientX + 'px';
        arrMoveCont.parentNode.style.top = (e.clientY + Math.max(document.body.scrollTop,document.documentElement.scrollTop)) + 'px';
        return false;
        
    }
    function timerMoveNode()
    {
        if(arrMoveCounter>=0 && arrMoveCounter<10){
            arrMoveCounter = arrMoveCounter +1;
            setTimeout('timerMoveNode()',20);
        }
        if(arrMoveCounter>=10){
            arrMoveCont.appendChild(arrTarget);
        }
    }
        
    function arrangeNodeMove(e)
    {
        if(document.all)e = event;
        if(arrMoveCounter<10)return;
        if(document.all && arrMoveCounter>=10 && e.button!=1){
            arrangeNodeStopMove();
        }
        
        arrMoveCont.parentNode.style.left = e.clientX + 'px';
        arrMoveCont.parentNode.style.top = (e.clientY + Math.max(document.body.scrollTop,document.documentElement.scrollTop)) + 'px';    
        
        var tmpY = e.clientY + Math.max(document.body.scrollTop,document.documentElement.scrollTop);
        arrInsertDiv.style.display='none';
        arrNodesDestination = false;
        

        if(e.clientX<leftPosArrangableNodes || e.clientX>leftPosArrangableNodes + widthArrangableNodes)return; 
            
        var subs = arrParent.getElementsByTagName('LI');
        for(var no=0;no<subs.length;no++){
            var topPos =getTopPos(subs[no]);
            var tmpHeight = subs[no].offsetHeight;
            
            if(no==0){
                if(tmpY<=topPos && tmpY>=topPos-5){
                    arrInsertDiv.style.top = (topPos + offsetYInsertDiv) + 'px';
                    arrInsertDiv.style.display = 'block';                
                    arrNodesDestination = subs[no];    
                    insertAsFirstNode=true;
                    return;
                }                
            }
            
            if(tmpY>=topPos && tmpY<=(topPos+tmpHeight)){
                arrInsertDiv.style.top = (topPos+tmpHeight + offsetYInsertDiv) + 'px';
                arrInsertDiv.style.display = 'block';                
                arrNodesDestination = subs[no];
                insertAsFirstNode = false;
                return;
            }                
        }
    }
    
    function arrangeNodeStopMove()
    {
        arrMoveCounter = -1; 
        arrInsertDiv.style.display='none';
        
        if(arrNodesDestination){
            var subs = arrParent.getElementsByTagName('LI');
            if(arrNodesDestination==subs[0] && insertAsFirstNode){
                arrParent.insertBefore(arrTarget,arrNodesDestination);        
            }else{
                if(arrNodesDestination.nextSibling){
                    arrParent.insertBefore(arrTarget,arrNodesDestination.nextSibling);
                }else{
                    arrParent.appendChild(arrTarget);
                }
            }
        }        
        arrNodesDestination = false;
        clearMovableDiv();
    }        
    
    function saveArrangableNodes()
    {
        var nodes = arrParent.getElementsByTagName('LI');
        var string = "";
        for(var no=0;no<nodes.length;no++){
            if(string.length>0)string = string + ',';
            string = string + nodes[no].id;        
        }
        
        document.forms[0].hiddenNodeIds.value = string;
        
        // Just for testing
        document.getElementById('arrDebug').innerHTML = 'Ready to save these nodes:<br>' + string.replace(/,/g,',<BR>');    
        
        // document.forms[0].submit(); // Remove the comment in front of this line when you have set an action to the form.
        
    }
    
    function initArrangableNodes()
    {
        arrParent = document.getElementById('arrangableNodes');
        arrMoveCont = document.getElementById('movableNode').getElementsByTagName('UL')[0];
        arrInsertDiv = document.getElementById('arrDestInditcator');
        
        leftPosArrangableNodes = getLeftPos(arrParent);
        arrInsertDiv.style.left = leftPosArrangableNodes - 5 + 'px';
        widthArrangableNodes = arrParent.offsetWidth;
        
        var subs = arrParent.getElementsByTagName('LI');
        for(var no=0;no<subs.length;no++){
            subs[no].onmousedown = initMoveNode;
            subs[no].onselectstart = cancelEvent;    
        }
    
        document.documentElement.onmouseup = arrangeNodeStopMove;
        document.documentElement.onmousemove = arrangeNodeMove;
        document.documentElement.onselectstart = cancelEvent;
        
    }    
    
    window.onload = initArrangableNodes;
    
    </script>


Ide u <body>

Code:
<H1>Arrange the nodes below</H1>
<ul id="arrangableNodes">
    <li id="node1">Node no. 1</li>
    <li id="node2">Node no. 2</li>
    <li id="node3">Node no. 3</li>
    <li id="node4">Node no. 4</li>
    <li id="node5">Node no. 5</li>
    <li id="node6">Node no. 6</li>
    <li id="node7">Node no. 7</li>
    <li id="node8">Node no. 8</li>    
    <li id="node9">Node no. 9</li>    
    <li id="node10">Node no. 10</li>    
    <li id="node11">Node no. 11</li>    
    <li id="node12">Node no. 12</li>    
    <li id="node13">Node no. 13</li>    
    <li id="node14">Node no. 14</li>    
    <li id="node15">Node no. 15</li>    
</ul>    
<p>
    <a href="#" onclick="saveArrangableNodes();return false">Save</a>
</p>
<div id="movableNode"><ul></ul></div>    
<div id="arrDestInditcator"><img src="images/insert.gif"></div>
<div id="arrDebug"></div>
<form method="post" action="????">
    <input type="hidden" name="hiddenNodeIds">
</form>


Kako da napravim "kolacic" koji ce u browseru korisnika da pamti ovaj raspored.

Hvala unapred.
 
Odgovor na temu

357_97

Član broj: 53056
Poruke: 104
*.eunet.yu.



+5 Profil

icon Re: Drag and drop i pamcenje "premestenih" rezultata29.11.2006. u 10:01 - pre 211 meseci
U script-u vec postoji ova funkcija treba je samo iskoristiti. Ime funkcije je: saveArrangableNodes()
Code:

    function saveArrangableNodes()
    {
        var nodes = arrParent.getElementsByTagName('LI');
        var string = "";
        for(var no=0;no<nodes.length;no++){
            if(string.length>0)string = string + ',';
            string = string + nodes[no].id;        
        }
        
        document.forms[0].hiddenNodeIds.value = string;
        //  Kreiraj input polje sa imenom hiddenNodeIds, naravno pre toga napravi form element
        
        // Just for testing
        document.getElementById('arrDebug').innerHTML = 'Ready to save these nodes:<br>' + string.replace(/,/g,',<BR>');    
        
        // document.forms[0].submit(); // Remove the comment in front of this line when you have set an action to the form.
        // Skini komentar sa gorenje linije ako zelis da se redosled liste posalje negde ili umesto istog ubaci kod za pozivanje
        // fukcije koja ce da postavi cookie

    }
 
Odgovor na temu

[es] :: Javascript i AJAX :: Drag and drop i pamcenje "premestenih" rezultata

[ Pregleda: 1656 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.