Option Dropdown with Colors Move Example
Color option example
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<!-- You'd need to set up something different for touch devices though -->
<h1>Move testings</h1>
<div class="wrap">
<div>
<label for="optionSelection">Select options</label>
<select name="optionSelection" id="optionSelection">
<option value="1">OptionOne</option>
<option value="2">OptionTwo</option>
</select>
</div>
<div>
<label for="lineupColors">Colors:<br /></label>
<select id="lineupColors">
<option value="-">select</option>
<option value="blue">Blue</option>
<option value="orange">Orange</option>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="purple">Purple</option>
<option value="brown">Brown</option>
<option value="black">Black</option>
<option value="magenta">Magenta</option>
</select>
</div>
<div>
<button id="showOptions" onclick="showOptions()" type="button">
Show Options
</button>
</div>
<div>
<label for="inp1">Enter a row A - H</label>
<input id="inp1" placeholder="Enter Row" />
<label for="inp2">Enter a column 1 - 12</label>
<input id="inp2" placeholder="Enter Column" />
<button id="calculate">Calculate</button>
<p class="target">The cell number is <b id="cellnum">?</b></p>
<button id="move-text" type="button">Move Text Content!</button>
</div>
<div id="phrase">
<!-- remove whitespace from inside div html and then we can use :empty in css to change background -->
<!-- <div data-id="1"><span class="words" data-id="1">H1 text</span></div>
<div data-id="2"><span class="words" data-id="2">H2 text</span></div>
<div data-id="3"><span class="words" data-id="3">H3 text</span></div>
<div data-id="4"><span...
CSS
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
counter-reset: columnCount 1 alphaCount cellCount;
}
h1 {
text-align: center;
}
.wrap {
display: flex;
gap: 2rem;
position: relative;
padding-left: 220px;
}
.grid {
margin: auto;
display: grid;
flex: 1 0 0;
grid-template-columns: repeat(12, 1fr);
padding-top: 1.5rem;
}
.item {
position: relative;
background-color: #f9f9f9;
border: 1px solid grey;
aspect-ratio: 1/1;
counter-increment: columnCount;
min-width: 0;
transition: background 1s ease;
}
.item:nth-of-type(12n + 1) {
counter-increment: alphaCount;
}
.item:nth-of-type(12n + 1)::before {
content: counter(alphaCount, upper-alpha);
position: absolute;
display: flex;
align-items: center;
top: 0;
bottom: 0;
left: -1.75rem;
color: red;
pointer-events: none;
}
.item:nth-of-type(n + 13)::after {
display: none;
}
.item::after {
content: counter(columnCount);
position: absolute;
left: 0;
right: 0;
text-align: center;
top: -1.75rem;
color: red;
pointer-events: none;
}
.content {
display: flex;
flex-direction: column;
justify-content: center;
width: 100%;
height: 100%;
overflow: auto;
color: #000;
padding: 1rem;
word-wrap: break-word;
counter-increment: cellCount;
}
.words {
cursor: move;
transition: padding 0.5s ease;
}
.content:has(.ui-draggable-dragging) {
overflow: visible;
}
.ui-droppable-active .content {
overflow: visible;
}
.words.ui-draggable-dragging {
background: blue;
padding: 5px 10px;
border-radius: 6px;
z-index: 999;
color: #fff;
display: block;
width: 50px;
height: 50px;
overflow: hidden;
}
#phrase {
position: absolute;
left: 0;
top: 0;
bottom: 0;
color: #fff;
width: 150px;
...
JavaScript
/*
Requires jquery + UI
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js
*/
$('[name="optionSelection"]').change(function () {
//clean up the divs inside div with id phrase
$("#phrase").empty();
});
let selectedColor;
function showOptions() {
console.log("hii");
console.log($("#optionSelection").val());
selectedColor = $('#lineupColors').val();
var html;
if ($("#optionSelection").val() == 1) {
for (i = 0; i < 3; i++) {
html = "<div data-id="+i+"><span class='words' style='color:black;background-color:white' data-id="+i+">OptionOne#"+i+"</span></div>";
$("#phrase").append(html);
}
}
else {
for (j = 0; j < 5; j++) {
html = "<div data-id="+j+"><span class='words' style='color:black;background-color:white' data-id="+j+">OptionTwo#"+j+"</span></div>";
$("#phrase").append(html);
}
// $("#phrase").append(html);
}
}
$(".words").draggable({
revert: function (event, ui) {
var bRevertingPhrase = this.closest("#drop-em");
if (!bRevertingPhrase.length) {
var phraseID = $(this).data("id");
var phraseHomeID = $(this).parent().data("id");
//If the child and parent ids don't match, we move the child to the correct parent
if (phraseID !== phraseHomeID) {
var correctCell = $("#phrase").find(
"div[data-id='" + phraseID + "']"
);
correctCell.prepend(this);
}
}
return !event;
},
});
$("#drop-em > div").droppable({
drop: function (ev, ui) {
$(ui.draggable)
.detach()
.css({ top: 0, left: 0 })
.appendTo($(this).find(".content:empty"));
//$("#move-text").addClass("disabled");
},
});
$("#phrase > div").droppable({
drop: function (ev, ui) {
$(ui.draggable).detach().css({ top: 0, left: 0...