mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2025-10-16 12:05:41 +00:00
293 lines
10 KiB
TypeScript
293 lines
10 KiB
TypeScript
let scroller: Scroller = new Scroller((left, top, zoom) => { });
|
|
scroller = new Scroller((left, top, zoom) => { }, {
|
|
scrollingX: true,
|
|
scrollingY: true,
|
|
animating: true,
|
|
animationDuration: 400,
|
|
bouncing: false,
|
|
locking: false,
|
|
paging: false,
|
|
snapping: true,
|
|
zooming: 10,
|
|
minZoom: 1,
|
|
maxZoom: 2
|
|
});
|
|
|
|
scroller.setDimensions(10, 10, 10, 10);
|
|
scroller.setPosition(200, 300);
|
|
scroller.setSnapSize(300, 300);
|
|
scroller.activatePullToRefresh(200, () => { }, () => { }, () => { });
|
|
scroller.finishPullToRefresh();
|
|
const data: {
|
|
left: number;
|
|
top: number;
|
|
zoom: number
|
|
} = scroller.getValues();
|
|
scroller.zoomTo(10);
|
|
scroller.zoomBy(10);
|
|
scroller.doMouseZoom(10, 10, 10, 10);
|
|
scroller.doTouchStart([{
|
|
pageX: 10,
|
|
pageY: 20
|
|
}], 200);
|
|
scroller.doTouchEnd(300);
|
|
|
|
declare const clientWidth: number;
|
|
declare const clientHeight: number;
|
|
declare function render(left: number, top: number, zoom: number): void;
|
|
|
|
declare const Tiling: any; // TODO: What is this?
|
|
|
|
function test_basic() {
|
|
const scrollerObj = new Scroller((left, top, zoom) => {
|
|
}, {
|
|
scrollingY: false
|
|
});
|
|
scrollerObj.setDimensions(1000, 1000, 3000, 3000);
|
|
}
|
|
|
|
function test_canvas() {
|
|
const contentWidth = 2000;
|
|
const contentHeight = 2000;
|
|
const cellWidth = 100;
|
|
const cellHeight = 100;
|
|
const content = document.getElementById('content') as HTMLCanvasElement;
|
|
const context = content.getContext('2d');
|
|
const tiling = new Tiling();
|
|
function render(left: number, top: number, zoom: number) {
|
|
content.width = clientWidth;
|
|
content.height = clientHeight;
|
|
context.clearRect(0, 0, clientWidth, clientHeight);
|
|
tiling.setup(clientWidth, clientHeight, contentWidth, contentHeight, cellWidth, cellHeight);
|
|
tiling.render(left, top, zoom, paint);
|
|
}
|
|
function paint(row: number, col: number, left: number, top: number, width: number, height: number, zoom: number) {
|
|
context.fillStyle = row % 2 + col % 2 > 0 ? "#ddd" : "#fff";
|
|
context.fillRect(left, top, width, height);
|
|
context.fillStyle = "black";
|
|
context.font = (14 * zoom).toFixed(2) + 'px "Helvetica Neue", Helvetica, Arial, sans-serif';
|
|
context.fillText(`${row},${col}`, left + (6 * zoom), top + (18 * zoom));
|
|
}
|
|
}
|
|
|
|
function test_domlist() {
|
|
const container = document.getElementById("container");
|
|
const content = document.getElementById("content");
|
|
const refreshElem = content.getElementsByTagName("div")[0];
|
|
const scroller = new Scroller(render, {
|
|
scrollingX: false
|
|
});
|
|
scroller.activatePullToRefresh(50, () => {
|
|
refreshElem.className += " active";
|
|
refreshElem.innerHTML = "Release to Refresh";
|
|
}, () => {
|
|
refreshElem.className = refreshElem.className.replace(" active", "");
|
|
refreshElem.innerHTML = "Pull to Refresh";
|
|
}, () => {
|
|
refreshElem.className += " running";
|
|
refreshElem.innerHTML = "Refreshing...";
|
|
setTimeout(() => {
|
|
refreshElem.className = refreshElem.className.replace(" running", "");
|
|
insertItems();
|
|
scroller.finishPullToRefresh();
|
|
}, 2000);
|
|
});
|
|
const rect = container.getBoundingClientRect();
|
|
scroller.setPosition(rect.left + container.clientLeft, rect.top + container.clientTop);
|
|
const insertItems = () => {
|
|
for (let i = 0; i < 15; i++) {
|
|
const row = document.createElement("div");
|
|
row.className = "row";
|
|
row.style.backgroundColor = i % 2 > 0 ? "#ddd" : "";
|
|
row.innerHTML = Math.random().toString();
|
|
if (content.firstChild === content.lastChild) {
|
|
content.appendChild(row);
|
|
} else {
|
|
content.insertBefore(row, content.childNodes[1]);
|
|
}
|
|
}
|
|
scroller.setDimensions(container.clientWidth, container.clientHeight, content.offsetWidth, content.offsetHeight - 50);
|
|
};
|
|
insertItems();
|
|
if ('ontouchstart' in window) {
|
|
container.addEventListener("touchstart", e => {
|
|
// Don't react if initial down happens on a form element
|
|
if ((e.target as any).tagName.match(/input|textarea|select/i)) {
|
|
return;
|
|
}
|
|
scroller.doTouchStart((e as any).touches, e.timeStamp);
|
|
e.preventDefault();
|
|
}, false);
|
|
document.addEventListener("touchmove", e => {
|
|
scroller.doTouchMove((e as any).touches, e.timeStamp);
|
|
}, false);
|
|
document.addEventListener("touchend", e => {
|
|
scroller.doTouchEnd(e.timeStamp);
|
|
}, false);
|
|
} else {
|
|
let mousedown = false;
|
|
container.addEventListener("mousedown", e => {
|
|
if ((e.target as any).tagName.match(/input|textarea|select/i)) {
|
|
return;
|
|
}
|
|
scroller.doTouchStart([{
|
|
pageX: (e as any).pageX,
|
|
pageY: (e as any).pageY
|
|
}], e.timeStamp);
|
|
mousedown = true;
|
|
}, false);
|
|
document.addEventListener("mousemove", e => {
|
|
if (!mousedown) {
|
|
return;
|
|
}
|
|
scroller.doTouchMove([{
|
|
pageX: (e as any).pageX,
|
|
pageY: (e as any).pageY
|
|
}], e.timeStamp);
|
|
mousedown = true;
|
|
}, false);
|
|
document.addEventListener("mouseup", e => {
|
|
if (!mousedown) {
|
|
return;
|
|
}
|
|
scroller.doTouchEnd(e.timeStamp);
|
|
mousedown = false;
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
function test_dompaging() {
|
|
const container = document.getElementById("container");
|
|
const content = document.getElementById("content");
|
|
const size = 400;
|
|
const frag = document.createDocumentFragment();
|
|
for (let cell = 0, cl = content.clientWidth / size; cell < cl; cell++) {
|
|
const elem = document.createElement("div");
|
|
elem.className = "cell";
|
|
elem.style.backgroundColor = cell % 2 > 0 ? "#ddd" : "";
|
|
elem.innerHTML = cell.toString();
|
|
frag.appendChild(elem);
|
|
}
|
|
content.appendChild(frag);
|
|
const scroller = new Scroller(render, {
|
|
scrollingY: false,
|
|
paging: true
|
|
});
|
|
const rect = container.getBoundingClientRect();
|
|
scroller.setPosition(rect.left + container.clientLeft, rect.top + container.clientTop);
|
|
scroller.setDimensions(container.clientWidth, container.clientHeight, content.offsetWidth, content.offsetHeight);
|
|
if ('ontouchstart' in window) {
|
|
container.addEventListener("touchstart", e => {
|
|
if ((e.target as any).tagName.match(/input|textarea|select/i)) {
|
|
return;
|
|
}
|
|
scroller.doTouchStart((e as any).touches, e.timeStamp);
|
|
e.preventDefault();
|
|
}, false);
|
|
document.addEventListener("touchmove", e => {
|
|
scroller.doTouchMove((e as any).touches, e.timeStamp);
|
|
}, false);
|
|
document.addEventListener("touchend", e => {
|
|
scroller.doTouchEnd(e.timeStamp);
|
|
}, false);
|
|
} else {
|
|
let mousedown = false;
|
|
container.addEventListener("mousedown", e => {
|
|
if ((e.target as any).tagName.match(/input|textarea|select/i)) {
|
|
return;
|
|
}
|
|
scroller.doTouchStart([{
|
|
pageX: (e as any).pageX,
|
|
pageY: (e as any).pageY
|
|
}], e.timeStamp);
|
|
mousedown = true;
|
|
}, false);
|
|
document.addEventListener("mousemove", e => {
|
|
if (!mousedown) {
|
|
return;
|
|
}
|
|
scroller.doTouchMove([{
|
|
pageX: (e as any).pageX,
|
|
pageY: (e as any).pageY
|
|
}], e.timeStamp);
|
|
mousedown = true;
|
|
}, false);
|
|
|
|
document.addEventListener("mouseup", e => {
|
|
if (!mousedown) {
|
|
return;
|
|
}
|
|
scroller.doTouchEnd(e.timeStamp);
|
|
mousedown = false;
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
function test_domsnapping() {
|
|
const container = document.getElementById("container");
|
|
const content = document.getElementById("content");
|
|
const size = 100;
|
|
const frag = document.createDocumentFragment();
|
|
for (let row = 0, rl = content.clientHeight / size; row < rl; row++) {
|
|
for (let cell = 0, cl = content.clientWidth / size; cell < cl; cell++) {
|
|
const elem = document.createElement("div");
|
|
elem.className = "cell";
|
|
elem.style.backgroundColor = row % 2 + cell % 2 > 0 ? "#ddd" : "";
|
|
elem.innerHTML = `${row},${cell}`;
|
|
frag.appendChild(elem);
|
|
}
|
|
}
|
|
content.appendChild(frag);
|
|
const scroller = new Scroller(render, {
|
|
snapping: true
|
|
});
|
|
const rect = container.getBoundingClientRect();
|
|
scroller.setPosition(rect.left + container.clientLeft, rect.top + container.clientTop);
|
|
scroller.setDimensions(container.clientWidth, container.clientHeight, content.offsetWidth, content.offsetHeight);
|
|
scroller.setSnapSize(100, 100);
|
|
if ('ontouchstart' in window) {
|
|
container.addEventListener("touchstart", e => {
|
|
if ((e.target as any).tagName.match(/input|textarea|select/i)) {
|
|
return;
|
|
}
|
|
scroller.doTouchStart((e as any).touches, e.timeStamp);
|
|
e.preventDefault();
|
|
}, false);
|
|
document.addEventListener("touchmove", e => {
|
|
scroller.doTouchMove((e as any).touches, e.timeStamp);
|
|
}, false);
|
|
document.addEventListener("touchend", e => {
|
|
scroller.doTouchEnd(e.timeStamp);
|
|
}, false);
|
|
} else {
|
|
let mousedown = false;
|
|
container.addEventListener("mousedown", e => {
|
|
if ((e.target as any).tagName.match(/input|textarea|select/i)) {
|
|
return;
|
|
}
|
|
scroller.doTouchStart([{
|
|
pageX: (e as any).pageX,
|
|
pageY: (e as any).pageY
|
|
}], e.timeStamp);
|
|
mousedown = true;
|
|
}, false);
|
|
document.addEventListener("mousemove", e => {
|
|
if (!mousedown) {
|
|
return;
|
|
}
|
|
scroller.doTouchMove([{
|
|
pageX: (e as any).pageX,
|
|
pageY: (e as any).pageY
|
|
}], e.timeStamp);
|
|
mousedown = true;
|
|
}, false);
|
|
document.addEventListener("mouseup", e => {
|
|
if (!mousedown) {
|
|
return;
|
|
}
|
|
scroller.doTouchEnd(e.timeStamp);
|
|
mousedown = false;
|
|
}, false);
|
|
}
|
|
}
|