当我调整元素的大小或关闭它时,之后创建的所有其他元素都将移动。我不希望在计划方面产生这种影响,而只是在“待办事项”部分。
如何分隔这些以使待办事项部分始终井井有条,但在计划方面,事情不会动摇?
HTML:
<!DOCTYPE html>
<html>
<head>
<title>Drag n Drop To-do-Calendar</title>
<meta charset="utf-8">
<meta name="viewport" content="width = device-width, initial-scale = 1.0">
<link rel="stylesheet" type="text/css" media="screen" href="screen.css">
<link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<!-- Bootstrap -->
<link href="bootstrap-4.0.0-dist/css/bootstrap.css" rel="stylesheet" />
<script src="bootstrap-4.0.0-dist/js/bootstrap.js"></script>
<script src="js/bootstrap.min.js"></script>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://code.jquery.com/jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/themes/base/jquery-ui.css" />
<style>
.ui-widget-header p,
.ui-widget-content p {
margin: 0;
}
</style>
<script>
$(document).ready(function() {
$(".droppable").droppable({
classes: {
"ui-droppable-active": "ui-state-active",
"ui-droppable-hover": "ui-state-hover"
}
});
});
</script>
</head>
<body>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<div class="container">
<div class="row">
<div id="time" class="col-sm-1">
<p id="p1">07:00</p>
<p>08:00</p>
<p>09:00</p>
<p>10:00</p>
<p>11:00</p>
<p>12:00</p>
<p>13:00</p>
<p>14:00</p>
<p>15:00</p>
<p>16:00</p>
<p>17:00</p>
<p>18:00</p>
<p>19:00</p>
<p>20:00</p>
<p>21:00</p>
<p>22:00</p>
</div>
<div class="col-sm-4" id="schedule">Schedule
<div class="droppable" id="tillförgrid" class="ui-widget-header">
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
<div class="ruta"></div>
</div>
</div>
<div class="col-sm-4" id="todo">
<div id="myDIV" class="header">
<h2>To-Do:s</h2>
<input type="text" id="myInput" placeholder="Event...">
<span onclick="newElement()" class="addBtn">Add</span>
<script>
document.onkeydown = function(e) {
var keyCode = e.keyCode;
if (keyCode == 13) {
newElement();
}
}
</script>
</div>
<div id="droppable" class="droppable" class="ui-widget-header">
<ul id="myUL">
</ul>
</div>
</div>
</div>
<script src="app.js"></script> <!-- Ska denna ligga efter jQuery script?-->
</div>
</body>
</html>
CSS:
#todo {
background-color: #6d6565;
padding-top: 15px;
}
#div1 {
margin-top: 3px;
}
#schedule .ruta {
width: 350px;
height: 45.5px;
padding: 0px;
border: 1px solid #aaaaaa;
list-style-type: none;
}
#resizable {
width: 350px;
height: 150px;
padding: 0.5em;
}
#myUL {
height: auto;
padding: 0px;
list-style-type: none;
}
ul {
margin: 0;
padding: 0;
list-style-type: none;
}
li {
cursor: pointer;
position: fixed;
padding: 8px 8px 8px 30px;
background: #eee;
font-size: 18px;
transition: 0.1s;
border: 1px solid #aaaaaa;
width: 350px;
/* make the list items unselectable */
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
li:hover {
background: #ddd;
}
li.checked {
background: #888;
color: #fff;
text-decoration: line-through;
}
.close {
position: absolute;
right: 0;
top: 0;
padding: 9px 16px 9px 16px;
}
.close:hover {
background-color: #f44336;
color: white;
}
.header {
background-color: #f44336;
padding: 25px 40px;
color: white;
}
.header:after {
content: "";
display: table;
clear: both;
}
input {
margin: 0;
border: none;
border-radius: 0;
width: 75%;
padding: 10px;
float: left;
font-size: 16px;
}
/* Style the "Add" button */
.addBtn {
padding: 10px;
width: 25%;
background: #d9d9d9;
color: #555;
float: left;
text-align: center;
font-size: 16px;
cursor: pointer;
transition: 0.3s;
border-radius: 0;
}
.addBtn:hover {
background-color: #bbb;
}
p {
font-size: 13px;
display: block;
padding-top: 10px;
padding-left: 30px;
}
#p1 {
padding-top: 20px;
}
#schedule {
padding: 0px;
}
#time {
padding-right: 0px;
}
JavaScript:
// Create a "close" button and append it to each list item
var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
var span = document.createElement("SPAN");
var txt = document.createTextNode("\u00D7");
span.className = "close";
span.appendChild(txt);
myNodelist[i].appendChild(span);
}
// Click on a close button to hide the current list item
var close = document.getElementsByClassName("close");
var i;
for (i = 0; i < close.length; i++) {
close[i].onclick = function() {
var div = this.parentElement;
div.style.display = "none";
}
}
// Add a "checked" symbol when clicking on a list item
var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
if (ev.target.tagName === 'LI') {
ev.target.classList.toggle('checked');
}
}, false);
// Create a new list item when clicking on the "Add" button
function newElement() {
var li = document.createElement("li");
var inputValue = document.getElementById("myInput").value;
var t = document.createTextNode(inputValue);
li.appendChild(t);
//Lägger till eget, så att nya element kan flyttas till schemat
var uniq = 'id' + (new Date()).getTime();
li.setAttribute("id", uniq);
li.classList.add("ui-widget-content");
li.classList.add("draggable");
if (inputValue === '') {
alert("You must write something!");
} else {
document.getElementById("myUL").appendChild(li);
}
document.getElementById("myInput").value = "";
$("li").resizable({
maxHeight: 500,
minHeight: 11.375,
grid: 11.375,
handles: 's'
});
$("li").draggable({
snap: ".droppable",
snapMode: "inner",
revert: "invalid",
grid: [400, 11.375]
})
var span = document.createElement("SPAN");
var txt = document.createTextNode("\u00D7");
span.className = "close";
span.appendChild(txt);
li.appendChild(span);
for (i = 0; i < close.length; i++) {
close[i].onclick = function() {
var div = this.parentElement;
div.style.display = "none";
}
}
}