如何轻松复制拖放卡片的 trello 样式? (看板风格的应用程序)[关闭]

Posted

技术标签:

【中文标题】如何轻松复制拖放卡片的 trello 样式? (看板风格的应用程序)[关闭]【英文标题】:How can I easily duplicate the trello style of drag and drop of cards? (Kanban style app) [closed] 【发布时间】:2014-02-08 08:38:13 【问题描述】:

我正在构建一个网络应用程序,它使用与 trello 类似的拖放隐喻,通过将卡片从一个列表拖放到另一个列表来移动卡片。

我该怎么做?

【问题讨论】:

另一个可能的解决方案是React/Redux example on Github 【参考方案1】:

以下示例使用 jQuery UI“可排序”和 CSS3 来做 Trello“倾斜”拖动效果。

你可以check it out here as a jsfiddle:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Sortable - Portlets</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
  <style>

  .tilt 
    transform: rotate(3deg);
    -moz-transform: rotate(3deg);
    -webkit-transform: rotate(3deg);
  

  body 
    min-width: 520px;
  

  .column 
    width: 170px;
    float: left;
    padding-bottom: 100px;
  
  .portlet 
    margin: 0 1em 1em 0;
    padding: 0.3em;
  
  .portlet-header 
    padding: 0.2em 0.3em;
    margin-bottom: 0.5em;
    position: relative;
  
  .portlet-toggle 
    position: absolute;
    top: 50%;
    right: 0;
    margin-top: -8px;
  
  .portlet-content 
    padding: 0.4em;
  
  .portlet-placeholder 
    border: 1px dotted black;
    margin: 0 1em 1em 0;
    height: 50px;
  
  </style>
  <script>
  $(onPageLoad);

  function onPageLoad()
  
    $( ".column" ).sortable(
      connectWith: ".column",
      handle: ".portlet-header",
      cancel: ".portlet-toggle",
      start: function (event, ui) 
        ui.item.addClass('tilt');
      ,
      stop: function (event, ui) 
        ui.item.removeClass('tilt');
      
    );

    $( ".portlet" )
      .addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
      .find( ".portlet-header" )
        .addClass( "ui-widget-header ui-corner-all" )
        .prepend( "<span class='ui-icon ui-icon-minusthick portlet-toggle'></span>");

    $( ".portlet-toggle" ).click(function() 
      var icon = $( this );
      icon.toggleClass( "ui-icon-minusthick ui-icon-plusthick" );
      icon.closest( ".portlet" ).find( ".portlet-content" ).toggle();
    );
  
  </script>

</head>
<body>

<div class="column">

  <div class="portlet">
    <div class="portlet-header">Feeds</div>
    <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
  </div>

  <div class="portlet">
    <div class="portlet-header">News</div>
    <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
  </div>

</div>

<div class="column">

  <div class="portlet">
    <div class="portlet-header">Shopping</div>
    <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
  </div>

</div>

<div class="column">

  <div class="portlet">
    <div class="portlet-header">Links</div>
    <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
  </div>

  <div class="portlet">
    <div class="portlet-header">Images</div>
    <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
  </div>

</div>


</body>
</html>

【讨论】:

如果您已经在小提琴中提供了一个工作示例,为什么不尝试在代码中突出您意图的关键方面并减少“刚刚转储整个 html 页面”的外观和感觉你的答案:D 好吧...因为我没有写大部分...它实际上只是 jQuery UI 可排序演示 found here 的 90% 副本,还有一个额外的 javascript 事件来进行倾斜影响。现在当人们用谷歌搜索“trello card effect javascript”时,他们会得到这个示例,这比我得到的要多;-) 请添加解决方案的说明。【参考方案2】:

基于Brad Parks-s answer right on this very page 构建的升级版本,具有更多缩进和令人敬畏的倾斜拖动方向效果,如this jsFiddle page 所示。

JavaScript 中的不同位遵循 cmets:

$( ".column" ).sortable(
    connectWith: ".column",
    handle: ".portlet-header",
    cancel: ".portlet-toggle",
    start: function (event, ui) 
        ui.item.addClass('tilt');
        // Start monitoring tilt direction
        tilt_direction(ui.item);
    ,
    stop: function (event, ui) 
        ui.item.removeClass("tilt");
        // Unbind temporary handlers and excess data
        $("html").unbind('mousemove', ui.item.data("move_handler"));
        ui.item.removeData("move_handler");
    
);

// Monitor tilt direction and switch between classes accordingly
function tilt_direction(item) 
    var left_pos = item.position().left,
        move_handler = function (e) 
            if (e.pageX >= left_pos) 
                item.addClass("right");
                item.removeClass("left");
             else 
                item.addClass("left");
                item.removeClass("right");
            
            left_pos = e.pageX;
        ;
    $("html").bind("mousemove", move_handler);
    item.data("move_handler", move_handler);
  

不同倾斜度的 CSS 修改

.tilt.right 
    transform: rotate(3deg);
    -moz-transform: rotate(3deg);
    -webkit-transform: rotate(3deg);

.tilt.left 
    transform: rotate(-3deg);
    -moz-transform: rotate(-3deg);
    -webkit-transform: rotate(-3deg);

【讨论】:

如何序列化最后的div标签/portlet,看看它属于哪个列表...? 请在网站上提出一个新问题,并详细说明和概括一下您的目标是什么

以上是关于如何轻松复制拖放卡片的 trello 样式? (看板风格的应用程序)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery droppable,我如何复制 trello 将人物图像拖放到卡片上的行为,它捕捉到卡片的右下角?

Trello 如何访问用户的剪贴板?

如何获取 Trello 列表中最重要的卡片的某些信息?

使用 Trello API 创建卡片后如何解析响应

使用cdkDropList时元素样式不适用(Angluar cdk拖放)

Roblox:从 ​​Trello 编辑/删除卡片