Lightning component with drag and drop feature
A simple lightning component explains how to create drag and drop elements in lightning.
Screenshots: -
Component_B.cmp
Component_B.js
Component_B.css
App: -
Screenshots: -
Component: -
Component_A.cmp
- <aura:component >
- <!--attribute-->
- <!--component markup-->
- <div class="slds-text-heading_large slds-p-left_medium">Component A</div>
- <div class="slds-grid">
- <div class="slds-col slds-size_3-of-12 one" draggable="true" ondragstart="{!c.dragStart}">
- <div class="slds-text-heading_small">This is first box</div>
- </div>
- <div class="slds-col slds-size_3-of-12 two" draggable="true" ondragstart="{!c.dragStart}">
- <div class="slds-text-heading_small">This is second box</div>
- </div>
- <div class="slds-col slds-size_3-of-12 three" draggable="true" ondragstart="{!c.dragStart}">
- <div class="slds-text-heading_small">This is third box</div>
- </div>
- </div>
- </aura:component>
Component_A.js
- ({
- dragStart : function(component, event, helper) {
- event.dataTransfer.setData('innerHTML', event.target.firstElementChild.innerHTML);
- event.dataTransfer.setData('classList', event.target.classList.value);
- }
- })
- .THIS .one, .THIS .two, .THIS .three{
- max-height: 90px;
- margin: 20px;
- padding: 5px;
- color: #fff;
- cursor: -webkit-grab;
- }
- .THIS .one:active, .THIS .two:active, .THIS .three:active{
- cursor: -webkit-grabbing;
- }
- .THIS .one{
- background-color: red;
- }
- .THIS .two{
- background-color: blue;
- }
- .THIS .three{
- background-color: green;
- }
- <aura:component >
- <!--attributes-->
- <aura:attribute name="columnList" type="List" />
- <!--component markup-->
- <div class="slds-text-heading_large slds-p-left_medium">Component B</div>
- <div class="slds-grid slds-wrap drop-zone" aura:id="dropZone" ondragover="{!c.dragoverHandler}" ondragleave="{!c.dragLeaveHandler}" ondrop="{!c.dropHandler}">
- <!--iterate the dropped box here-->
- <aura:iteration items="{!v.columnList}" var="col">
- <div class="{!col.classList}">
- <div class="slds-text-heading_small">{!col.innerHTML}</div>
- </div>
- </aura:iteration>
- </div>
- </aura:component>
Component_B.js
- ({
- dragoverHandler : function(component, event, helper) {
- event.preventDefault();
- var dropZone = component.find("dropZone");
- $A.util.addClass(dropZone, 'active');
- },
- dragLeaveHandler : function(component, event, helper) {
- event.preventDefault();
- var dropZone = component.find("dropZone");
- $A.util.removeClass(dropZone, 'active');
- },
- dropHandler : function(component, event, helper) {
- event.preventDefault();
- var dropZone = component.find("dropZone");
- $A.util.removeClass(dropZone, 'active');
- var column = component.get('v.columnList');
- var columnAttributes = {};
- columnAttributes.innerHTML = event.dataTransfer.getData("innerHTML");
- columnAttributes.classList = event.dataTransfer.getData("classList");
- column.push(columnAttributes);
- component.set('v.columnList', column);
- },
- })
Component_B.css
- .THIS .one, .THIS .two, .THIS .three{
- max-height: 90px;
- margin: 20px;
- padding: 5px;
- color: #fff;
- cursor: pointer;
- }
- .THIS .one{
- background-color: red;
- }
- .THIS .two{
- background-color: blue;
- }
- .THIS .three{
- background-color: green;
- }
- .THIS.drop-zone{
- box-sizing: border-box;
- min-height: 200px;
- border-width: 2px;
- border-style: dashed;
- border-color: transparent;
- margin: 20px;
- }
- .THIS.active{
- border-color: #027FB3;
- }
App: -
- <aura:application extends="force:slds" access="GLOBAL" >
- <div class="slds-grid slds-m-bottom_xx-large">
- <div class="slds-col">
- <c:Component_A />
- </div>
- </div>
- <div class="slds-grid slds-m-bottom_xx-large">
- <div class="slds-col">
- <c:Component_B />
- </div>
- </div>
- </aura:application>




Comments
Post a Comment