You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

333 lines
14 KiB
JavaScript

2 months ago
//#region MobileDataList
MobileDataList = function (divid) {
this.ParentElement = $(document); //要加入的父容器
this.id = divid;
this.ApplicationPath = "";
var My = this;
this.IsSlide = true; //是否滑动
this.PageIndex = 1;
this.PageSize = 10;
this.PageCount = 0;
this.RowCount = 0;
this.LoadTitleID = "div_more";
this.CellTemplate = "";
this.DataSource = new Array(); //接受一个数组对象
var EventHandler = new Sys.EventHandlerList();
var PagerFlag=false;
//#region 初始化
this.Init = function () {
WindowSlide(); //滑动
$("#" + My.LoadTitleID + " span").click(function () {
var title = $(this).text();
if (title == "没有更多的数据") return;
PagerFlag = true;
My.PageIndex +=1;
OnPageIndexChanged();
});
}
//#endregion
//#region 绑定数据源
this.DataBind = function (source) {
var html = new Sys.StringBuilder();
$(source).each(function () {
var index = My.DataSource.length;
Array.add(My.DataSource, this);
var temp = this;
var controlHtml = My.CellTemplate;
StringArray = controlHtml.match(new RegExp("\{Bind [^}]*\}", "ig"));
if (StringArray != null) {
for (var i = 0; i < StringArray.length; i++) {
var ss = StringArray[i].substr(6, StringArray[i].length - 7).split(","); //分隔字符串
if (ss[0] == "index") {
controlHtml = controlHtml.replace("{Bind " + ss[0] + "}", index);
continue;
}
var value = temp[ss[0]]; //数据源的值
if (value == null) value = "";
if (this.CellFormatter)
value = this.CellFormatter(value);
if (ss.length == 1) {
//不需要格式化
controlHtml = controlHtml.replace("{Bind " + ss[0] + "}", value)
}
else {
if (value == "") {
controlHtml = controlHtml.replace("{Bind " + ss[0] + "," + ss[1] + "}", value);
}
else {
var FormatValue = "";
if (ss[1] != "encode") {
if (ss[1].length == 2 && ss[1].substr(0, 1) == "d") {
FormatValue = parseFloat(value.localeFormat("n" + ss[1].substr(1, 1))).localeFormat("d");
} else { FormatValue = value.localeFormat(ss[1]); }
}
else {
FormatValue = escape(value);
}
controlHtml = controlHtml.replace("{Bind " + ss[0] + "," + ss[1] + "}", FormatValue)
}
}
}
}
controlHtml = controlHtml.replace(new RegExp("checked='false'", "ig"), "");
controlHtml = controlHtml.replace(new RegExp("checked=''", "ig"), "");
html.append(controlHtml);
});
if (My.PageCount > 1) {
//$("#" + My.LoadTitleID).hide();
if (My.PageIndex == My.PageCount) {
$("#" + My.LoadTitleID + " span").text("没有更多的数据");
$("#" + My.LoadTitleID + " .weui-loading").hide();
} else {
$("#" + My.LoadTitleID + " .weui-loading").show();
$("#" + My.LoadTitleID + " span").text("点击加载更多");
}
} else {
//$("#" + My.LoadTitleID).hide();
$("#" + My.LoadTitleID + " span").text("没有更多的数据");
$("#" + My.LoadTitleID + " .weui-loading").hide();
}
if (My.PageIndex == 1) {
$("#" + My.id, My.ParentElement).html(html.toString());
} else {
$("#" + My.id, My.ParentElement).append(html.toString());
}
}
//#endregion
//#region 获取行对应数据源对象
this.Get_Model = function (RowIndex) {
return this.DataSource[RowIndex];
}
//#endregion
//#region 设置总行数
this.Set_RowCount = function (RowCount) {
PagerFlag = false;
My.RowCount = RowCount;
if (RowCount == 0) {
My.PageIndex = 1;
My.PageCount = 0;
} else {
My.PageCount = Math.ceil(My.RowCount / My.PageSize);
}
}
//#endregion
//#region 获取总页数
this.Get_PageIndex = function () {
if (My.PageIndex > 1) {
if (My.PagerFlag == false) {
My.PageIndex = 1;
}
}
return My.PageIndex;
}
//#endregion
//#region 获取每页行数
this.Get_PageSize = function () {
return My.PageSize;
}
//#endregion
//#region 分页改变事件
this.add_PageIndexChanged = function (handler) {
EventHandler.addHandler('PageIndexChanged', handler);
}
//#endregion
//#region 分页改变事件
function OnPageIndexChanged() {
var h = EventHandler.getHandler('PageIndexChanged');
if (h) h(this, Sys.EventArgs.Empty);
}
//#endregion
//#region 滑动删除
function WindowSlide() {
if (My.IsSlide == false) return;
window.addEventListener('load', function () {
var initX; //触摸位置
var moveX; //滑动时的位置
var X = 0; //移动距离
var objX = 0; //目标对象位置
var start;
window.addEventListener('touchstart', function (event) {
var touches = event.touches[0];
start = {
x: touches.pageX, // 横坐标
y: touches.pageY // 纵坐标
};
// event.preventDefault();
var obj = event.target.parentNode;
var obj2 = event.target.parentNode.parentNode;
var obj3 = event.target.parentNode.parentNode.parentNode;
if (obj.className == "list-li") {
initX = event.targetTouches[0].pageX;
objX = (obj.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
}
else
if (obj2.className == "list-li") {
initX = event.targetTouches[0].pageX;
objX = (obj2.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
}
else
if (obj3.className == "list-li") {
initX = event.targetTouches[0].pageX;
objX = (obj3.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
}
if (objX == 0) {
window.addEventListener('touchmove', function (event) {
//event.preventDefault();
var touches = event.touches[0];
delta = {
x: touches.pageX - start.x,
y: touches.pageY - start.y
};
// 横向位移大于纵向位移,阻止纵向滚动
if (Math.abs(delta.x) > Math.abs(delta.y)) {
event.preventDefault();
}
var obj = event.target.parentNode;
var obj2 = event.target.parentNode.parentNode;
var obj3 = event.target.parentNode.parentNode.parentNode;
if (obj.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
obj.style.WebkitTransform = "translateX(" + 0 + "px)";
} else if (X < 0) {
var l = Math.abs(X);
obj.style.WebkitTransform = "translateX(" + -l + "px)";
if (l > 80) {
l = 80;
obj.style.WebkitTransform = "translateX(" + -l + "px)";
}
}
}
else if (obj2.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
obj2.style.WebkitTransform = "translateX(" + 0 + "px)";
} else if (X < 0) {
var l = Math.abs(X);
obj2.style.WebkitTransform = "translateX(" + -l + "px)";
if (l > 80) {
l = 80;
obj2.style.WebkitTransform = "translateX(" + -l + "px)";
}
}
}
else if (obj3.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
obj3.style.WebkitTransform = "translateX(" + 0 + "px)";
} else if (X < 0) {
var l = Math.abs(X);
obj3.style.WebkitTransform = "translateX(" + -l + "px)";
if (l > 80) {
l = 80;
obj3.style.WebkitTransform = "translateX(" + -l + "px)";
}
}
}
});
} else if (objX < 0) {
window.addEventListener('touchmove', function (event) {
// event.preventDefault();
var obj = event.target.parentNode;
var obj2 = event.target.parentNode.parentNode;
var obj3 = event.target.parentNode.parentNode.parentNode;
if (obj.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
var r = -80 + Math.abs(X);
obj.style.WebkitTransform = "translateX(" + r + "px)";
if (r > 0) {
r = 0;
obj.style.WebkitTransform = "translateX(" + r + "px)";
}
} else { //向左滑动
obj.style.WebkitTransform = "translateX(" + -80 + "px)";
}
}
else if (obj2.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
var r = -80 + Math.abs(X);
obj2.style.WebkitTransform = "translateX(" + r + "px)";
if (r > 0) {
r = 0;
obj2.style.WebkitTransform = "translateX(" + r + "px)";
}
} else { //向左滑动
obj2.style.WebkitTransform = "translateX(" + -80 + "px)";
}
}
else if (obj3.className == "list-li") {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
var r = -80 + Math.abs(X);
obj3.style.WebkitTransform = "translateX(" + r + "px)";
if (r > 0) {
r = 0;
obj3.style.WebkitTransform = "translateX(" + r + "px)";
}
} else { //向左滑动
obj3.style.WebkitTransform = "translateX(" + -80 + "px)";
}
}
});
}
})
window.addEventListener('touchend', function (event) {
// event.preventDefault();
var obj = event.target.parentNode;
var obj2 = event.target.parentNode.parentNode;
var obj3 = event.target.parentNode.parentNode.parentNode;
if (obj.className == "list-li") {
objX = (obj.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
if (objX > -40) {
obj.style.WebkitTransform = "translateX(" + 0 + "px)";
objX = 0;
} else {
obj.style.WebkitTransform = "translateX(" + -80 + "px)";
objX = -80;
}
}
else if (obj2.className == "list-li") {
objX = (obj2.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
if (objX > -40) {
obj2.style.WebkitTransform = "translateX(" + 0 + "px)";
objX = 0;
} else {
obj2.style.WebkitTransform = "translateX(" + -80 + "px)";
objX = -80;
}
}
else if (obj3.className == "list-li") {
objX = (obj3.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
if (objX > -40) {
obj3.style.WebkitTransform = "translateX(" + 0 + "px)";
objX = 0;
} else {
obj3.style.WebkitTransform = "translateX(" + -80 + "px)";
objX = -80;
}
}
})
})
}
//#endregion
}
//#endregion