30 votes

jquery ui éléments draggables pas '#39;draggable '#39; en dehors de défilement div

je suis super perplexe.

j'ai de nombreux éléments (flottant href tags) dans un div avec une hauteur/largeur, avec défilement réglé sur "overflow: auto" dans le css.

c'est la structure de la divs:

<div id="tagFun_div_main">
<div id="tf_div_tagsReturn">
    <!-- all the draggable elements go in here, the parent div scolls -->
</div>
<div id=" tf_div_tagsDrop">
    <div id="tf_dropBox"></div>
</div></div>

le div parent s, 'tf_div_tagsReturn" et "tf_div_tagsDrop' sera finalement de laisser flotter à côté les uns des autres.

voici le jquery qui est exécuté après tous les "déplaçable" éléments ont été créé avec le nom de classe 'tag_cell', :

$(function() {
    $(".tag_cell").draggable({ 
        revert: 'invalid', 
        scroll: false,
        containment: '#tagFun_div_main'
    });
    $("#tf_dropBox").droppable({
        accept: '.tag_cell',
        hoverClass: 'tf_dropBox_hover',
        activeClass: 'tf_dropBox_active',
        drop: function(event, ui) {
            GLOBAL_ary_tf_tags.push(ui.draggable.html());
            tagFun_reload();
        }
    });
}); 

comme je l'ai dit ci-dessus, les éléments déplaçables sont déplaçable à l'intérieur de la div 'tf_div_tagsReturn", mais ils ne sont pas visuellement glisser en dehors de la div parent. digne de remarque, si je suis en faisant glisser l'un des éléments déplaçables, et déplacez la souris sur le drop div avec l'id 'tf_dropBox', puis le hoverclass est tiré, je ne peux pas voir l'élément déplaçable plus.

merci beaucoup pour tous les conseils sur de m'aider à trouver une solution. c'est mon premier run à l'aide de jquery, donc j'espère que je suis juste en manque de quelque chose de super évident. j'ai lu la documentation et de recherche des forums à ce jour pas de l'emporter :(

je vous remercie pour votre temps.

Mise à JOUR:

un grand merci à Jabes88 pour fournir la solution qui m'a permis de réaliser les fonctionnalités que je recherchais, voici ce que mon jquery fini par ressembler, n'hésitez pas à en faire la critique, comme je suis nouveau sur jquery.

$(function() {
    $(".tag_cell").draggable({ 
        revert: 'invalid', 
        scroll: false,
        containment: '#tagFun_div_main',
        helper: 'clone',
        start : function() {
        this.style.display="none";
        },
        stop: function() {
        this.style.display="";
        }
    });
    $(".tf_dropBox").droppable({
        accept: '.tag_cell',
        hoverClass: 'tf_dropBox_hover',
        activeClass: 'tf_dropBox_active',
        drop: function(event, ui) {
            GLOBAL_ary_tf_tags.push(ui.draggable.html());
            tagFun_reload();
        }
    });
}); 

Merci Jabes88, vous êtes mon sauveur! Fonctionne à merveille :)

36voto

JustinBull Points 1148

Allez-vous permettre à plus d'un exemple avec votre déplaçable objets? ensuite, utilisez l'aide et l'ajout de l'option:

$(".tag_cell").draggable({ 
  helper: 'clone',
  appendTo: 'div#myHelperHolder'
});

Ensuite, dans votre css, vous pouvez définir le zindex de div#myHelperHolder à 999. Si pas, alors essayez juste en utilisant le zindex option:

$(".tag_cell").draggable({ 
  zIndex: 999
});

Je voudrais également envisager de mettre en addClasses pour arrêter le plugin à partir de l'ajout de tous ces ennuyeux classes que les déchets de la vitesse du processeur.

MISE À JOUR: J'AI UNE NOUVELLE SOLUTION

Bon, après avoir joué avec elle pour un peu, j'ai trouvé ça: l'option de défilement ne s'arrête pas à l'enfant caché avec trop-plein. J'ai lu quelques autres posts et je ne peux pas trouver une solution unique. Mais je suis venu avec un peu de travail-une-ronde qui fait le travail.

<!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>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
    google.load("jquery", "1.4.0");
    google.load("jqueryui", "1.7.2");   
    google.setOnLoadCallback(OnLoad);
    function OnLoad(){
        var dropped = false;
        $(".tag_cell").draggable({ 
            addClasses: false,
            revert: 'invalid',
            containment: '#tagFun_div_main',
            helper: 'clone',
            appendTo: '#tagFun_div_helper',
            start: function(event, ui) {
                dropped = false;
                $(this).addClass("hide");
            },
            stop: function(event, ui) {
                if (dropped==true) {
                    $(this).remove();
                } else {
                    $(this).removeClass("hide");
                }
            }
        });
        $("#tf_dropBox").droppable({
            accept: '.tag_cell',
            hoverClass: 'tf_dropBox_hover',
            activeClass: 'tf_dropBox_active',
            drop: function(event, ui) {
                dropped = true;
                $.ui.ddmanager.current.cancelHelperRemoval = true;
                ui.helper.appendTo(this);
            }
        });
    }
    </script>
    <style>
        div#tagFun_div_main { display:block; width:800px; height:400px; margin:auto; padding:10px; background:#F00; }
        div#tf_div_tagsReturn { display:block; width:200px; height:100%; float:left; overflow:auto; background:#000; }
        div#tf_div_tagsDrop { display:block; width:200px; height:100%; float:right; background:#0F0; }
        div#tf_dropBox { display:block; width:100%; height:250px; background:#F0F; }
        span.tag_cell { display:block; width:25px; height:25px; margin:1px; float:left; cursor:pointer; background:#0FF; z-index:99; }
        span.tag_cell.hide { display:none; }
        div#tf_dropBox.tf_dropBox_hover { background:#FFF !important; }
        div#tf_dropBox.tf_dropBox_active { background:#333; }
    </style>
</head>
<body>
    <div id="tagFun_div_main">
        <div id="tf_div_tagsReturn">
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
            <span class="tag_cell"></span>
        </div>
        <div id="tf_div_tagsDrop">
            <div id="tf_dropBox"></div>
        </div>
    </div>
    <div id="tagFun_div_helper">
    <!-- this is where the helper gets appended for temporary use -->
    </div>
</body>
</html>

J'ai collé mon code entier de sorte que vous pouvez l'essayer. Voici une brève description: Lorsque vous commencez à faire glisser un élément, il se cache à l'origine, les clones, puis ajoute le clone d'un conteneur à l'extérieur de la zone de débordement de la zone. Une fois tombée, il supprime l'original et déplace le clone dans la zone de dépôt. Bien jusqu'à maintenant, nous avons résolu le problème de débordement, mais certains autres. Lorsque vous déposez un clone d'un élément dans la zone de dépôt, il disparaît. Pour empêcher cela, j'ai utilisé cette méthode:

$.ui.ddmanager.current.cancelHelperRemoval = true;

Maintenant, nous avons cessé de l'aide en cours de suppression, mais il reste dans la "div#tagFun_div_helper" alors que l'original déplaçable élément a réapparu.

ui.helper.appendTo(this);

Cela permettra de transférer l'aide de "div#tagFun_div_helper" dans notre zone de dépôt.

dropped = true;

Cela indiquera à notre fonction d'arrêt et de supprimer le poste d'origine du groupe, au lieu de supprimer le ".cacher" de la classe. Espérons que ça aide!

15voto

capsula Points 287

Dans mon cas, cela l'a résolu pour moi et fonctionne parfaitement!

Actualisé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X