Introduction
Introduction Statistics Contact Development Disclaimer Help
datalist: improve positioning - jscancer - Javascript crap (relatively small)
git clone git://git.codemadness.org/jscancer
Log
Files
Refs
README
LICENSE
---
commit f9290a2ec21da04fb5e93fcf6c4df10dcd76de0a
parent f734112b9eb4d332a44076fff86e9537e6cd3655
Author: Hiltjo Posthuma <[email protected]>
Date: Mon, 29 May 2017 09:52:16 +0200
datalist: improve positioning
- now also position the top position (+input height).
- add datalist popup to document.body instead of next of the input, the
input element can be inside an absolute or fixed div etc.
- (re)position the popup on opening it.
- improve fixed positioning, use document scroll position (this still
has some caveats).
Diffstat:
M datalist/datalist.js | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/datalist/datalist.js b/datalist/datalist.js
@@ -7,13 +7,6 @@ function datalist_init(input) {
var cursel = null, items = [], mouse = true, // enable mouse event han…
dropdown = document.createElement("div");
dropdown.className = "datalist-dropdown";
- var left = 0;
- for (var c = input; c; c = c.offsetParent) {
- if (["absolute", "fixed"].indexOf(c.style.position) == -1)
- left += c.offsetLeft;
- }
- dropdown.style.left = String(left) + "px";
- dropdown.style.minWidth = String(input.clientWidth) + "px";
for (var i = 0, ec = ellist.children; i < ec.length; i++) {
var div = document.createElement("div");
@@ -66,6 +59,20 @@ function datalist_init(input) {
};
var datalist_render = function(m) {
var dd = dropdown.cloneNode(false);
+ var left = 0, top = 0;
+ for (var c = input; c; c = c.offsetParent) {
+ left += c.offsetLeft;
+ top += c.offsetTop;
+ if (c.style.position == "fixed") {
+ left += window.scrollX;
+ top += window.scrollY;
+ break;
+ }
+ }
+ dd.style.left = String(left) + "px";
+ dd.style.top = String(top + input.offsetHeight) + "px";
+ dd.style.minWidth = String(input.clientWidth) + "px";
+
for (var i = 0; i < m.length; i++)
dd.appendChild(m[i].el);
dropdown.parentNode.replaceChild(dd, dropdown)
@@ -187,8 +194,7 @@ function datalist_init(input) {
}, false);
input.addEventListener("focus", focuschange, false);
document.addEventListener("click", focuschange, false);
-
- input.parentNode.insertBefore(dropdown, input.nextSibling);
+ document.body.appendChild(dropdown);
}
var els = document.getElementsByClassName("datalist");
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.