Если нужно будет, я скажу, "что и как"...
Вот код:
(function () {
var a,
b,
c = undefined,
d = document,
e,
f,
g = 'class',
h,
i,
j,
k,
l = function (f) {
d.addEventListener("DOMContentLoaded", f);
},
m,
n,
o,
p = "__proto__",
q,
r,
s,
t,
u,
v,
w = window,
x;
w.Afunc = {
val: function (t) {
var b = null,
a = this.a();
(t === c && ((b = a.value) || (b = a.innerHTML) || (b = a.innerText))) || (a.value = t) || (a.innerHTML = t) || (a.innerText = t);
return b ? b : a;
},
drag: function (v) {
var a = this.a(),
r = a;
if (v)
var dz = v.zonename,
dr = v.ondrop,
iz = v.zonedrop,
on = v.onzone,
off = v.offzone,
gz = v.grabelem;
a.addEventListener('mousedown', function () {
if (dz)
var F = A("[dropzone=" + dz + "]").cDetect();
var z = A(gz ? (typeof gz == "string" ? a.querySelector(gz) : gz) : a).cDetect(),
p = A.cPos(),
Z = a.pos(),
f2 = Z.l,
k2 = Z.t,
x = false;
w.onmousemove = function () {
if (z) {
var u = A.cPos(),
h = {
t: u.t - p.t,
l: u.l - p.l
};
if (F) {
!x && on && on();
x = true;
} else {
x && off && off();
x = false;
}
a.pos({
l: f2 + h.l,
t: k2 + h.t
});
}
return false;
};
w.onmouseup = function () {
x && iz && iz();
dr && dr();
w.onmousemove = '';
w.onmouseup = '';
};
return false;
});
return a;
},
gg:function (p) {
var a = this.a();
a.addEventListener('mousedown', function () {
console.log("gg");
});
},
pos: function (p) {
var a = this.a(),
u = a.getBoundingClientRect();
if (!p) {
return {
l: u.left,
r: u.right,
t: u.top,
b: u.bottom
}
} else {
p.t && (a.style.top = (p.t) + "px");
p.l && (a.style.left = (p.l) + "px");
return a;
}
},
cDetect: function (t) {
var p = A.cPos(t),
z = A(this.a()).pos(),
o;
if (z.r > p.l && p.l > z.l && z.b > p.t && p.t > z.t)
o = 1;
return o;
},
getStyle: function (t) {
var a = this.a();
return parseFloat(w.getComputedStyle(a).getPropertyValue(t));
},
attr: function (v) {
var b = null,
a = this.a(),
c;
if (typeof v === "object")
for (var k in v) {
a.setAttribute(k, v[k]);
}
else if (v)
b = a.getAttribute(v);
else {
b = {};
c = a.attributes;
for (var k in c) {
if (c[k].nodeName)
b[c[k].nodeName] = c[k].nodeValue;
}
}
return b ? b : a;
},
addClass: function (t) {
var a = this.a(),
l = a.attr(g);
a.attr({
class: (typeof l === "string" ? l + " " : "") + t
});
return a;
},
remClass: function (t) {
var a = this.a(),
c = a.attr(g).split(' '),
z = 0,
b = [];
while (z < c.length) {
c[z] !== t && (b[b.length] = c[z]);
++z;
}
a.attr({
class: b.join(' ')
});
return a;
},
addElem: function (e) {
k = d.createElement(e),
a = this.a();
return {
first: function () {
a.insertBefore(k, a.firstChild);
return k;
},
last: function () {
a.appendChild(k);
return k;
}
};
},
parent: function (n) {
var v = this.a(),
n = n ? n : 0,
p = 1,
a = v.parentNode;
while (p < n) {
a = a.parentNode;
++p;
}
return a;
},
remElem: function (e) {
var a = this.a();
a.removeChild(typeof e == "string" ? d.querySelector(e) : e);
return a;
}
};
w.AlastFunc = {
K: function () {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (ee) {}
}
if (typeof XMLHttpRequest != 'undefined') {
return new XMLHttpRequest();
}
},
b: function (s) {
return location.pathname + s || "";
},
cPos: function (t) {
t = t ? t : 'client';
return {
t: event[t + 'Y'],
l: event[t + 'X']
};
},
toJSON: function (t, p) {
var b = JSON.stringify(t);
b = p ? JSON.parse(a) : b;
return b;
},
ajax: function (d) {
d.url = d.url[0] != '?' && d.url ? d.url : this.b(d.url);
d.type = d.type || "GET";
d.async = d.async || 1;
d.cache = d.cache || !1;
d.data = d.data || null;
var a = this.K();
d.url += !d.cache ? ((d.url.indexOf('?') >= 0) ? '&' : '?') + '_=' + new Date().getTime() : d.url;
a.open(d.type, d.url, d.async);
a.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
a.onreadystatechange = function () {
if (a.readyState == 4) {
d.success(
a.responseText);
}
};
a.send(d.data);
}
};
w.Ainit = function (s) {
this.a = function () {
return s;
};
this.__proto__ = Afunc;
};
(w.A = function (s) {
var s = s ? (typeof s === "string" ? d.querySelector(s) : s) : (this !== w ? this : d.body),
h = new Ainit(s);
return h;
})[p] = AlastFunc;
a = Node.prototype[p];
((Node.prototype[p] = Afunc)[p] = a).a = function () {
return this;
};
})();
//просто пример работы(потянуть за синий квадрат)
A('html')
.addElem('div')
.first()
.attr({
id:"gg",
style:"background:black;width:200px;height:200px;position:absolute;top:0;left:0"
})
.drag({
grabelem:"#sh"
})
.addElem('div')
.first()
.attr({
id:"sh",
style:"background:blue;width:50px;height:50px;position:absolute;top:20px;left:50px"
})
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, у меня есть компонент он состоит из List (immutableJS), я хочу этот компонент сделать в качестве бесконечного списка, при прокрутке...
В процессе отделения фронтэнда от rails приложения появилась необходимость собирать ассеты отдельно от рельсового asset pipelineрешил использовать...
Может кто сталкивался с такой проблемой? Система: Android Браузер: Chrome Mobile Элемент: Select[type=multiple] На select висит обработчик onchange