Draggable help
Всем привет. В общем не представляю как сделать такую вот вещь, знаю что в jQuery перетаскиваемые объекты можно сделать через Draggable().
Но в чём суть то. Изначально обьектты появляются в одной колонке, нужные перетаскиваем во вторую, так же важен порядок. Как это сделать? тут не только Draggable наверное, так? Sortables ещё?? как всё это реализовать? |
xTODx,
начните с макета |
начало с макета есть.
Макет конечно набрасал, только вот такие вопросы:
1) как передать это потом в php, то есть то что мы поставили в #sortable нужно записать в базу данных, при нажатии кнопки, ладно, всё бы ничего. НО, куда записать позиции и как? и как это всё вообще связать с php? что бы данные с каждого объекта которые я перетащил в поле, использовались в php. Нужно что ли скрытые input cоздать? и в них уже записывать позиции, и данные об элементе? но всё же, как их потом достать в php в нужном порядке, и как определить где закончился один блок, а где начался второй...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="/js/jquery-ui-1.9.2.custom.js"></script>
<link type="text/css" href="css/custom-theme/jquery-ui-1.9.2.custom.css" rel="stylesheet" />
<style>
body{padding:15px;}
ul { list-style-type: none; margin: 0; padding: 0; margin-bottom: 10px; }
li { margin: 5px; padding: 5px; width: 150px; }
#sortable{ min-height: 200px;
width:250px;
background: #e6e6e6 url(/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;}
</style>
<script>
$(function() {
$( "#accordion" ).accordion({
header: " > div > h3 > input"
});
$( "#sortable" ).sortable({
revert: true
});
$( "#draggable li" ).draggable({
connectToSortable: "#sortable",
helper: "clone",
revert: "invalid"
});
$( "ul, li" ).disableSelection();
});
</script>
</head>
<body>
<ul id="draggable">
<li id='aaccordion' class="ui-state-default">
<h3>Section 1</h3>
<div>
<input type="text" name="name"/>
</div></li>
<li id='aaccordion' class="ui-state-default"><h3>Section 1</h3>
<div>
<input type="text" name="name2"/>
</div></li></li>
</ul>
<form method="post">
<ul id="sortable">
<li id='aaccordion' class="ui-state-default">Уже готовый модуль</li>
</ul>
<input type="submit" name="go" value='Go'/>
</form>
<?php
if(isset($_POST['go'])){
echo $_POST['name'];
}
?>
</body>
</html>
2) Вот поставил я объект в #sortable. Но он мне стал не нужен, как сделать что бы его можно было удалить, то есть вывожу я его за пределы поля, и он удаляется, либо просто возвращается на своё место, с колонки выбора. Пример - когда беру #draggbatle li, и отпускаю его за пределами поля, он возвращается туда, где я его взял. но он стал дочерним в #sortable, а значит нужно что бы при нажатии на обьект, он становился дочерним для #draggbatle. Верно?? но как? 3) попытался aaccordion ещё поставить, но не работает если его на <li> ставлю в чём проблема может бытЬ? правильно отстроить нужно? |
xTODx,
аяксом отправляйте текущий порядок когда надоест сортировать ... и так вариант ... из первого блока берём сколько хотим ... во втором сортируем ... в третем отображается текущее состояние сортировки, можно использовать для отправки на сервер ... если во втором блоке что-то лишнее смело бросаем ненужный блок в корзину для мусора... :write:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>demo</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<style type='text/css'>
body{font:0.8em Arial,sans-serif}
h1{font-size:1.2em;text-align:center}
.wrapper{margin:20px auto}
#block1,#block2,.out{border:solid 1px #555555;margin:10px;padding:20px;-moz-border-radius:5px;-webkit-border-radius:5px;float:left;min-width:100px}
.textBlock{border:solid 1px #333333;font-weight:bold;margin:10px 0 5px 0;padding:10px;text-align:center;background:#eee;-moz-border-radius:3px;-webkit-border-radius:3px}
.dropHere{background:#e7e7de}
.table_drop{width:400px;height:}
</style>
<script type='text/javascript'>
$(window).load(function () {
$("#block1 .textBlock").draggable({
helper: "clone",
connectToSortable: "#block2"
});
$("#block2").sortable({
stop: verify
});
function verify() {
var texts = [];
$("#block2 .textBlock").each(function (indx, element) {
texts.push($(element).text() + " ")
});
$(".out").html(texts)
}
$("#trash").droppable({
accept: "#block2 .textBlock",
drop: function (event, ui) {
ui.draggable.hide("slow", function () {
$(this).remove();
verify()
})
}
})
});
</script>
</head>
<body>
<div class="wrapper">
<div id="block1" class="bla connectedSortable">
<div class="textBlock ui-state-default">Блок 1</div>
<div class="textBlock ui-state-default">Блок 2</div>
<div class="textBlock ui-state-default">Блок 3</div>
<div class="textBlock ui-state-default">Блок 4</div>
<div class="textBlock ui-state-default">Блок 5</div>
<div class="textBlock ui-state-default">Блок 6</div>
</div>
<div id="block2" class="bla"></div>
<div class="out"></div>
</div>
<img src="http://www.specodegdaopt.ru/data/medium/korzina_dlya_musora_plats..jpg" alt="" id="trash" width="100" height="120">
</body>
</html>
|
Спасибо, метод с удалением работает, однако остаётся место от блока, и в коде отображает этот элемент(хотя он и пустой).
Так же не понял как достать порядок. и информацию с каждого из блоков?? лично я думаю что то типа такого, сделать массив $inf['num']['inf'] где num - порядок этого элемента, инф - имя поля с информацией. |
Цитата:
|
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="/js/jquery-ui-1.9.2.custom.js"></script>
<link type="text/css" href="css/custom-theme/jquery-ui-1.9.2.custom.css" rel="stylesheet" />
<style>
body{padding:15px;}
ul { list-style-type: none; margin: 0; padding: 0; margin-bottom: 10px; }
li { margin: 5px; padding: 5px; width: 150px; }
#sortable{ min-height: 200px;
width:250px;
background: #e6e6e6 url(/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;}
</style>
<script>
$(function() {
$( "#accordion" ).accordion({
header: " > div > h3 > input"
});
$( "#sortable" ).sortable({
revert: true
});
$( "#draggable li" ).draggable({
connectToSortable: "#sortable",
helper: "clone",
revert: "invalid"
});
$( "ul, li" ).disableSelection();
$("#trash").droppable({
accept: "#sortable li",
drop: function (event, ui) {
ui.draggable.hide("slow", function () {
$(this).remove();
verify()
})
function verify() {
var texts = [];
$("#sortable li").each(function (indx, element) {
texts.push($(element).text() + " ")
});
$(".out").html(texts)
}
}
})
});
</script>
</head>
<body>
<ul id="draggable">
<li id='aaccordion' class="ui-state-default">
<h3>Section 1</h3>
<div>
<input type="text" name="name"/>
</div></li>
<li id='aaccordion' class="ui-state-default"><h3>Section 1</h3>
<div>
<input type="text" name="name2"/>
</div></li></li>
</ul>
<form method="post">
<ul id="sortable">
<li id='aaccordion' class="ui-state-default">Уже готовый модуль</li>
</ul>
<input type="submit" name="go" value='Go'/>
</form>
<img src="http://www.specodegdaopt.ru/data/medium/korzina_dlya_musora_plats..jpg" alt="" id="trash" width="100" height="120">
<?php
if(isset($_POST['go'])){
echo $_POST['name'];
}
?>
</body>
</html>
вот код, что не то не так? |
в общем я перетаскиваю элемент в trash, он как бы пропадает из виду, но остаётся
<li class="ui-state-default ui-sortable-placeholder" style="visibility: hidden; height: 20px;"></li> и всё-равно занимает место, как его убрать совсем. |
Цитата:
|
xTODx,
да и что это за ересь 55, 60, 67 -- id ??? |
про ересь, пытаюсь ещё сделать аккардион, в общем что бы не портить картину, уберу сейчас))
|
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="/js/jquery-ui-1.9.2.custom.js"></script>
<link type="text/css" href="css/custom-theme/jquery-ui-1.9.2.custom.css" rel="stylesheet" />
<style>
body{padding:15px;}
ul { list-style-type: none; margin: 0; padding: 0; margin-bottom: 10px; }
li { margin: 5px; padding: 5px; width: 150px; }
#sortable{ min-height: 200px;
width:250px;
background: #e6e6e6 url(/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;}
</style>
<script>
$(function() {
$( "#sortable" ).sortable({
revert: true
});
$( "#draggable li" ).draggable({
connectToSortable: "#sortable",
helper: "clone",
revert: "invalid"
});
$( "ul, li" ).disableSelection();
$("#trash").droppable({
accept: "#sortable li",
drop: function (event, ui) {
ui.draggable.hide("slow", function () {
$(this).remove();
verify()
})
function verify() {
var texts = [];
$("#sortable li").each(function (indx, element) {
texts.push($(element).text() + " ")
});
$(".out").html(texts)
}
}
})
});
</script>
</head>
<body>
<ul id="draggable">
<li class="ui-state-default">
<h3>Section 1</h3>
<div>
<input type="text" name="name"/>
</div></li>
<li class="ui-state-default"><h3>Section 1</h3>
<div>
<input type="text" name="name2"/>
</div></li>
</ul>
<form method="post">
<ul id="sortable">
<li class="ui-state-default">Уже готовый модуль</li>
</ul>
<input type="submit" name="go" value='Go'/>
</form>
<div class="out"></div>
<img src="http://www.specodegdaopt.ru/data/medium/korzina_dlya_musora_plats..jpg" alt="" id="trash" width="100" height="120">
<?php
if(isset($_POST['go'])){
echo $_POST['name'];
}
?>
</body>
</html>
Вот что имеем Убрал всё не нужное, что бы не было ереси. И так, не удаляет толково, не смотря на то, что обьект пропадает с поля зрения, он всё так же занимает место в родительском ul, сортируется. В общем это не удаляет его совсем |
xTODx,
ломайте дальше -- копируйте пожалуйста внимательнее!!!
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<style type='text/css'>
body{font:0.8em Arial,sans-serif}
h1{font-size:1.2em;text-align:center}
.wrapper{margin:20px auto}
#block1,#block2,.out{border:solid 1px #555555;margin:10px;padding:20px;-moz-border-radius:5px;-webkit-border-radius:5px;float:left;min-width:100px}
.textBlock{border:solid 1px #333333;font-weight:bold;margin:10px 0 5px 0;padding:10px;text-align:center;background:#eee;-moz-border-radius:3px;-webkit-border-radius:3px}
.dropHere{background:#e7e7de}
.table_drop{width:400px;height:}
</style>
<link type="text/css" href="css/custom-theme/jquery-ui-1.9.2.custom.css" rel="stylesheet" />
<style>
body{padding:15px;}
ul { list-style-type: none; margin: 0; padding: 0; margin-bottom: 10px; }
li { margin: 5px; padding: 5px; width: 150px; }
#sortable{ min-height: 200px;
width:250px;
background: #e6e6e6 url(/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;}
</style>
<script>
$(function() {
function verify() {
var texts = [];
$("#sortable li").each(function (indx, element) {
texts.push($(element).text() + " ")
});
$(".out").html(texts)
}
$( "#sortable" ).sortable({
stop: verify
});
$( "#draggable li" ).draggable({
connectToSortable: "#sortable",
helper: "clone"
});
$( "ul, li" ).disableSelection();
$("#trash").droppable({
accept: "#sortable li",
drop: function (event, ui) {
ui.draggable.hide("slow", function () {
$(this).remove();
verify()
})
}
})
});
</script>
</head>
<body> <div class="out"></div>
<ul id="draggable">
<li>
<h3>Section 1</h3>
<input type="text" name="name"/>
</li>
<li>
<h3>Section 2</h3>
<input type="text" name="name2"/>
</li>
</ul>
<form method="post">
<ul id="sortable">
<li >Уже готовый модуль</li>
</ul>
<input type="submit" name="go" value='Go'/>
</form>
<img src="http://www.specodegdaopt.ru/data/medium/korzina_dlya_musora_plats..jpg" alt="" id="trash" width="100" height="120">
</body>
</html>
|
Хм, действительно. что то где то промазал, удаляет, хотя пропали стили почему то... что у меня было не так то??
нужный обьект создавало, но почему то и создавало ещё один, когда начинал перетаскивать с сортабле. теперь осталось придумать как создать массив, передать его в php, и как пометить номерами обьекты. Да, то что можно выводить содержимое их, это хорошо.. но не то что нужно, к сожалению... в общем, огромнейшее вам спасибо, добрейший человек, на сегодня хватит, глаза уже закрываются, буду рад если вы завтра мне подскажете, как пометить элемент номерами. Возможно станет понятней если расскажу что делаю. В общем выводит в draggable все блоки, я перетаскиваю нужные, каждый можно открыть, и задать параметри типа имя, выводить ли имя, и в некоторых ещё textarea. После этого я нажимаю на кнопку, оно обрабатывается, и записывает в базу данных, в поле position пишет позицию, в name соответственно имя и т.д. Прошу прощения если я что делаю не так, я учусь... поэтому и пишу.. мне очень стыдно что в js я слаб, но я и пишу здесь, что бы помогли разобраться... |
xTODx,
ваш код и мой сравните-- функция verify засунута куда попало -- вывод этой фунции отсутствует -- классы я ваши убрал хотите вертайте -- только id разные всегда и везде. всё я пас читайте доки. |
Спасибо в общем огромное)) попробуем ещё, ну раз пас, просьба одна, я выложу чуть позже ещё, куда продвинулся, посмотрите? нужно что бы кто то тыкнул пальцем и сказал "можно сделать легче", либо "не правильно"
|
| Часовой пояс GMT +3, время: 21:32. |