javascript - 可拖放列表

标签 javascript jquery jquery-ui drag-and-drop jquery-ui-draggable

我的网站上有一个侧面固定标签,当点击它时会显示一个菜单。在这个菜单上,我有一个包含图像的列表。

我想要实现的是,用户可以将图像拖到我网站的主体上,然后将其移动并重新定位到他们想要的任何位置——我在实现这一点上没有任何困难,并且在使用ui 可拖放。

但是我遇到的问题是实现以下目标:

当将图像从菜单列表拖到主体上时,我希望图像的“克隆”保留在菜单上,以便可以将同一图像多次拖到主体上,从而产生许多相同的图像背景图片。

我希望能够将包含图像列表的菜单折叠/关闭到其原始位置,作为网页左侧的固定选项卡。-我可以实现这一点,我遇到的问题是当我关闭菜单,我放置在页面主体上的所有拖放图像根据菜单移动移动位置,我想要的是让它们留在我拖放它们的位置,无论菜单是否是打开或关闭。

我也想在菜单上显示多张图片,但一次只显示 4 张,因此当用户单击左侧按钮和右侧按钮 div 时,会显示更多图像。

最后,我在菜单上有一个名为 clear 的按钮,单击该按钮会删除 body 上所有拖动的图像(干净的平板)。

我的 html 是:

<div id="work-slide-menu">
<div id="work-slide-menu-tab">
<a href="#/!"></a>
</div>
<div id="work-slide-menu-content">
<span class="button left"></span><span 
<ul>
<li><img class="sticker-picker" src="<?php bloginfo('stylesheet_directory'); ?>/images/cow.png" alt="" /></li>
<li><img class="sticker-picker" src="<?php bloginfo('stylesheet_directory'); ?>/images/chicken.png" alt="" /></li>
<li><img class="sticker-picker" src="<?php bloginfo('stylesheet_directory'); ?>/images/cloud.png" alt="" /></li>
<li><img class="sticker-picker" src="<?php bloginfo('stylesheet_directory'); ?>/images/dog.png" alt="" /></li>
<li><img class="sticker-picker" src="<?php bloginfo('stylesheet_directory'); ?>/images/heart.png" alt="" /></li>
<li><img class="sticker-picker" src="<?php bloginfo('stylesheet_directory'); ?>/images/monkey.png" alt="" /></li>
<li><img class="sticker-picker" src="<?php bloginfo('stylesheet_directory'); ?>/images/rabbit.png" alt="" /></li>
</ul>
<span class="button right"></span><span class="button clear"></span><span class="button close"></span>
</div>
</div>

我的 jquery 是:

$(window).load(function() {
$("#work-slide-menu").css('left', '-800px');

$("#work-slide-menu-tab a").toggle( 
function () { 
$(this).text('Quick Contact Hide / Close [-]')
$("#work-slide-menu").animate({left: "100px"}, {queue:false, duration: 500, easing: 'linear'})
}, 
function () { 
$(this).text('Quick Contact Show / Open [+]')
$("#work-slide-menu").animate({left: "-800px"}, {queue:false, duration: 500, easing: 'linear'}) 
} 
); 
});


$('#work-slide-menu-content span.button.clear').click(function()
{
stickersRemoveAll(true);
});


$('#work-slide-menu-content span.button.close').click(function()
{
$("#work-slide-menu").animate({left: "-800px"}, {queue:false, duration: 500, easing: 'linear'})
});


$(document).ready(function() {
$("img.sticker-picker").draggable({helper: 'clone', containment:'document', cursor:'move'});
$("body").droppable({
accept: ".img.sticker-picker",
cursor: 'move',
containment: 'document',
stop: stickerMoved
});
});

我的 CSS 是:

#work-slide-menu { position: fixed; left: -800px; top: 320px; width: 847px; z-index: 9998; }
#work-slide-menu-tab,
#work-slide-menu-content {
background: #ffc423;        
}

#work-slide-menu span.button.left {
left: 0px;
background-position: left bottom;
}

#work-slide-menu span.button.right {
right: 45px;
background-position: left top;
}

#work-slide-menu span.button.clear {
top: 125px;
right: 195px;
width: 156px;
height: 38px;
background-image: url('images/button_stickersclear.png');
background-position: left top;
}

#work-slide-menu span.button.close {
top: 106px;
right: 63px;
width: 126px;
height: 57px;
background-image: url('images/button_stickersclose.png');
background-position: left top;
}

#work-slide-menu span.button {
display: block;
position: absolute;
top: 0px;
width: 82px;
height: 125px;
cursor: pointer;
background-image: url('images/stickers-navi.png');
}

#work-slide-menu-tab {
    width: 47px;
    height: 107px;
    float: right;
}

#work-slide-menu-tab a {
    display: block;
    width: 100%;
    height: 100%;
    background:url(../img/view-all-work.png) no-repeat center;
}

#work-slide-menu-content {
    width: 800px;
    height:150px;       
    height: auto;       
    float: left;
}

    #work-slide-menu-content ul {
        list-style: none;
        margin: 20px;
        padding: 0;
        height:140px;
    }

        #work-slide-menu-content ul li {
            height: 125px;
            margin: 0px 20px;
            float: left;
        }

            #work-slide-menu-content ul li a {
                color: #111;
                text-decoration: none;
            }

            #work-slide-menu-content ul li a:hover {
                color: #fff;
            }

            img.sticker
            {
                display: block;
                position: absolute;
                z-index: 3;
            }

            img.sticker-dropped
            {
                display: block;
                position: absolute;
                z-index: 18;
            }

最佳答案

draggable 的默认行为是被拖动的对象是原始对象的幻像。

您必须使用辅助选项来定义被拖动的对象。在您的情况下,这将是一个新对象,您可以在其中放置任何需要放在另一侧的东西。

http://jqueryui.com/demos/draggable/#option-helper

关于javascript - 可拖放列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10796871/

相关文章:

href onclick请求中的Javascript传递变量

javascript - 在代码生成的输入元素上访问 keyup 事件

javascript - jQuery 360 倒计时 - 计时器运行时添加秒数的按钮

jquery - 缩放 DOM 元素 : Scaling vs transform

javascript - 奇怪的 iframe 加载 src 但在 firefox 和 safari 中显示空白

html - 加粗 Lucida Sans 时 CSS 中奇怪的文本对齐问题

javascript - Ember.js URL 如何表示每个可能的路由器状态?

javascript - JQuery tabs() 方法问题,选项卡创建

javascript - 如何使用jquery在页面上显示特定的div id?

javascript - 删除大于 .. 数字的数组项