jQueryMobile - 用于列表视图的向上/向下按钮
问题描述:
在我的页面中,我需要将上/下项目的按钮放在a中,我的客户端不接受拖放过程,他们想重新排序由按钮发生的项目。jQueryMobile - 用于列表视图的向上/向下按钮
有可能吗? 我找的样品,但没有看到任何形式的这种情况,一般来说,样品谈论jQueryUI和拖/放
答
不完全是一个简单的答案。
工作实例:https://jsfiddle.net/Twisty/t1ruyg11/16/
手机测试:https://jsfiddle.net/Twisty/t1ruyg11/16/show/
HTML
<div data-role="page">
<div data-role="header">
<h1>jQuery mobile Listview with drag and drop</h1>
</div>
<div data-role="content">
<ul data-role="listview" data-inset="true" data-theme="d" id="lst">
<li data-role="list-divider">Manual Sort List</li>
<li class="first">
<span class="ui-icon ui-icon-arrow-1-n up"></span>
<span class="ui-icon ui-icon-arrow-1-s down"></span> List Item 1
</li>
<li>
<span class="ui-icon ui-icon-arrow-1-n up"></span>
<span class="ui-icon ui-icon-arrow-1-s down"></span> List Item 2
</li>
<li>
<span class="ui-icon ui-icon-arrow-1-n up"></span>
<span class="ui-icon ui-icon-arrow-1-s down"></span> List Item 3
</li>
<li>
<span class="ui-icon ui-icon-arrow-1-n up"></span>
<span class="ui-icon ui-icon-arrow-1-s down"></span> List Item 4</li>
<li class="last">
<span class="ui-icon ui-icon-arrow-1-n up"></span>
<span class="ui-icon ui-icon-arrow-1-s down"></span> List Item 5</li>
</ul>
</div>
<!-- /content -->
</div>
<!-- /page -->
CSS
.ui-listview li.ui-li-static {
padding-left: 1.5em;
position: relative;
font-size: 1.4em;
}
.ui-listview li.ui-li-static span {
border: 1px solid #ccc;
border-radius: 3px;
position: absolute;
width: 20px;
height: 20px;
}
.ui-listview li.ui-li-static span.up {
margin-left: -1.3em;
top: 5px;
}
.ui-listview li.ui-li-static span.down {
margin-left: -1.3em;
top: 30px;
}
的JavaScript
var elements = {
up: $("<span>", {
class: "ui-icon ui-icon-arrow-1-n up"
}),
down: $("<span>", {
class: "ui-icon ui-icon-arrow-1-s down"
})
};
function sortRefresh(list) {
var id = list.attr("id");
var $lst = $("#" + id);
$lst.listview("refresh");
$lst.find(".first .up").remove();
$lst.find(".last .down").remove();
$lst.find(".ui-state-active").removeClass("ui-state-active");
}
function sortMakeListArray(list) {
var itemArray = [];
list.find(".ui-li:not(.ui-list-divider)").each(function(ind, el) {
itemArray.push($(el).text().trim());
});
return itemArray;
}
function manualSort(elem, dir) {
var $list = elem.parent();
var prevLi = elem.prev();
var nextLi = elem.next();
var temp = elem.detach();
if (dir == "up") {
console.log("Moving Temp Up", prevLi);
if (temp.hasClass("last")) {
temp.removeClass("last");
prevLi.addClass("last");
}
if (prevLi.hasClass("first")) {
prevLi.removeClass("first");
prevLi.append(elements.up.clone());
temp.addClass("first");
}
prevLi.before(temp.prop("outerHTML"));
}
if (dir == "down") {
console.log("Moving Temp Down", nextLi);
if (temp.hasClass("first")) {
temp.removeClass("first");
nextLi.addClass("first");
}
if (nextLi.hasClass("last")) {
nextLi.removeClass("last");
nextLi.append(elements.down.clone());
temp.addClass("last");
}
nextLi.after(temp.prop("outerHTML"));
}
sortRefresh($list);
}
$(function() {
$("#lst .ui-icon").hover(function() {
$(this).addClass("ui-state-active");
}, function() {
$(this).removeClass("ui-state-active");
});
$("#lst").on("click", ".ui-icon", function(e) {
var $t = $(this);
var $li = $t.parent();
console.log("Clicked", $t);
if ($li.hasClass("first")) {
elements.up.clone().appendTo($li);
}
if ($li.hasClass(".last")) {
elements.down.clone().appendTo($li);
}
if ($t.hasClass("up")) {
manualSort($li, "up");
}
if ($t.hasClass("down")) {
manualSort($li, "down");
}
});
sortRefresh($("#lst"));
});
基本上,我们添加的按钮。由于这是为移动用户界面设计的,我试图让按钮尽可能大,以便于轻松点击。我们将分离该列表项并根据点击哪个按钮将其移动到up
或down
。有条件的,如果它是第一个或最后一个项目,我们添加或删除列表项中的按钮。
更新
如果你想通过凹凸进行排序,不带按键,而是通过确定是否有在上半部分或项目的下半部一个水龙头,你可以这样做:
function sortRefresh(list) {
console.log("List Refresh");
list.listview("refresh");
}
function manualSort(elem, dir) {
var $list = elem.parent();
var $prevLi = elem.prev();
var $nextLi = elem.next();
var $temp = elem.detach();
if (dir == "up") {
$prevLi.before($temp);
}
if (dir == "down") {
$nextLi.after($temp);
}
sortRefresh($list);
}
$(function() {
$("#lst").disableSelection();
$("#lst").on("click", ".ui-li-static", function(e) {
var $li = $(this);
console.log($li.text() + " clicked");
var posY = (e.offsetY !== null) ? e.offsetY : e.originalEvent.layerY;
var mid = $li.outerHeight(true)/2;
console.log(posY + "/" + mid);
if (posY < mid) {
if ($li.hasClass("ui-first-child")) {
return false;
}
console.log("Move " + $li.text() + " Up");
manualSort($li, "up");
} else if (posY > mid) {
if ($li.hasClass("ui-last-child")) {
return false;
}
console.log("Move " + $li.text() + " Down");
manualSort($li, "down");
}
});
$(document).on("mousemove", function(event) {
var pageY = event.pageY;
var offsetY = (event.offsetY !== null) ? event.offsetY : event.originalEvent.layerY;
$(".report").text("pageY: " + pageY + ", offsetY: " + offsetY);
});
});
.report {
font-size: 65%;
}
<link rel="stylesheet" href="http://code.jquery.com/mobile/latest/jquery.mobile.css" />
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script src="http://code.jquery.com/mobile/latest/jquery.mobile.js"></script>
<script src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
<div data-role="page">
<div data-role="header">
<h1>jQuery mobile Listview with drag and drop</h1>
</div>
<div data-role="content">
<ul data-role="listview" data-inset="true" data-theme="d" id="lst">
<li data-role="list-divider">Manual Sort List</li>
<li>List Item 1</li>
<li>List Item 2</li>
<li>List Item 3</li>
<li>List Item 4</li>
<li>List Item 5</li>
</ul>
</div>
<div class="report">
</div>
<!-- /content -->
</div>
<!-- /page -->
+0
非常感谢您的支持时间和你的努力,我看到的演示,你告诉不容易实现它,但你创建代码的主要部分。 – MCunha98
不是内置功能。您需要添加按钮并编写脚本。你能提供一些示例代码吗? – Twisty
@Twisty类似这样的,一个简单的列表视图... http://jsfiddle.net/MauriceG/mzJkq/ http://demos.jquerymobile.com/1.4.5/listview/ – MCunha98