From 00105e8150c12aa32738d86e5a99bae81dbcf0ae Mon Sep 17 00:00:00 2001 From: linxiaowu66 Date: Fri, 27 Oct 2017 16:45:46 +0800 Subject: [PATCH 1/4] feat(better-scroll): add the types definition of better-scroll library --- types/better-scroll/better-scroll-tests.ts | 66 +++++++++ types/better-scroll/index.d.ts | 149 +++++++++++++++++++++ types/better-scroll/tsconfig.json | 24 ++++ types/better-scroll/tslint.json | 1 + 4 files changed, 240 insertions(+) create mode 100644 types/better-scroll/better-scroll-tests.ts create mode 100644 types/better-scroll/index.d.ts create mode 100644 types/better-scroll/tsconfig.json create mode 100644 types/better-scroll/tslint.json diff --git a/types/better-scroll/better-scroll-tests.ts b/types/better-scroll/better-scroll-tests.ts new file mode 100644 index 0000000000..239202cba7 --- /dev/null +++ b/types/better-scroll/better-scroll-tests.ts @@ -0,0 +1,66 @@ +const BScroll1 = new BScroll('#wrapper'); +const BScroll2 = new BScroll('#wrapper', { scrollX: false, scrollY: false }); +const BScroll3 = new BScroll('#wrapper', { + snap: true, + wheel: false, + scrollbar: false, + pullDownRefresh: false, +}); +const BScroll4 = new BScroll('#wrapper', { + wheel: { + selectedIndex: 0, + }, +}); +const BScroll6 = new BScroll('#wrapper', { + snap: { + loop: false, + el: document.querySelector('div-test'), + threshold: 0.1, + stepX: 100, + stepY: 100, + listenFlick: true, + }, +}); +const BScroll7 = new BScroll('#wrapper', { + scrollbar: { + fade: true, + }, +}); + +const BScroll8 = new BScroll('#wrapper', { + pullDownRefresh: { + threshold: 50, + stop: 20, + }, +}); + +BScroll1.refresh(); +BScroll1.scrollTo(0, 100); +BScroll1.scrollTo(0, 100, 200); + +BScroll1.scrollToElement('selectedElement'); +BScroll1.scrollToElement('selectedElement', 250); + +BScroll1.scrollToElement(document.getElementById('selectedElement')); +BScroll1.scrollToElement(document.getElementById('selectedElement'), 250); + +BScroll2.on('scrollStart', () => { console.log('scroll started'); }); + +const BScroll9 = new BScroll(document.getElementById('wrapper')); +const BScroll10 = new BScroll(document.getElementById('wrapper'), { freeScroll: true }); +const BScroll11 = new BScroll(document.getElementById('wrapper'), { + preventDefaultException: { + tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/, + }, +}); +const BScroll12 = new BScroll(document.getElementById('wrapper'), { + preventDefaultException: { + className: /(^|\s)test(\s|$)/, + }, +}); + +const BScroll13 = new BScroll(document.getElementById('wrapper'), { + swipeBounceTime: 1000, +}); + +const BScroll14 = new BScroll('#wrapper', { disableMouse: true, disableTouch: false }); diff --git a/types/better-scroll/index.d.ts b/types/better-scroll/index.d.ts new file mode 100644 index 0000000000..4ba80fa483 --- /dev/null +++ b/types/better-scroll/index.d.ts @@ -0,0 +1,149 @@ +// Type definitions for better-scroll.js v1.3.1 +// Project: https://github.com/ustbhuangyi/better-scroll +// Definitions by: linxiaowu66 +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +interface WheelOption { + selectedIndex?: number, + rotate?: number, + adjustTime?: number +} + +interface SlideOption { + loop?: boolean, + el?: Element, + threshold?: number, + stepX?: number, + stepY?: number, + listenFlick?: boolean +} +interface ScrollBarOption { + fade?: boolean +} +interface PullDownOption { + threshold?: number, + stop?: number +} +interface PullUpOption { + threshold?: number +} +interface BsOption{ + startX?: number, + startY?: number, + scrollX?: boolean, + scrollY?: boolean, + freeScroll?: boolean, + directionLockThreshold?: number, + eventPassthrough?: string | boolean, + click?: boolean, + tap?: boolean, + bounce?: boolean, + bounceTime?: number, + momentum?: boolean, + momentumLimitTime?: number, + momentumLimitDistance?: number, + swipeTime?: number, + swipeBounceTime?: number, + deceleration?: number, + flickLimitTime?: number, + flickLimitDistance?: number, + resizePolling?: number, + probeType?: number, + preventDefault?: boolean, + preventDefaultException?: object, + HWCompositing?: boolean, + useTransition?: boolean, + useTransform?: boolean, + bindToWrapper?: boolean, + disableMouse?: boolean, + disableTouch?: boolean, + /** + * for picker + * wheel: { + * selectedIndex: 0, + * rotate: 25, + * adjustTime: 400 + * } + */ + wheel?: WheelOption | boolean, + /** + * for slide + * snap: { + * loop?: boolean, + * el: domEl, + * threshold: 0.1, + * stepX: 100, + * stepY: 100, + * listenFlick: true + * } + */ + snap?: SlideOption | boolean, + /** + * for scrollbar + * scrollbar: { + * fade: true + * } + */ + scrollbar?: ScrollBarOption | boolean, + /** + * for pull down and refresh + * pullDownRefresh: { + * threshold: 50, + * stop: 20 + * } + */ + pullDownRefresh?: PullDownOption | boolean, + /** + * for pull up and load + * pullUpLoad: { + * threshold: 50 + * } + */ + pullUpLoad?: PullUpOption | boolean +} +declare class BScroll { + constructor (element: Element | string, options?: BsOption); + // 重新计算 better-scroll,当 DOM 结构发生变化的时候务必要调用确保滚动的效果正常 + x: number + y: number + + refresh(): void + // 启用 better-scroll, 默认 开启 + enable(): void + // 禁用 better-scroll,DOM 事件(如 touchstart、touchmove、touchend)的回调函数不再响应 + disable(): void + // 相对于当前位置偏移滚动 x,y 的距离 + scrollBy(x: number, y: number, time?: number, easing?: object): void + // 滚动到指定的位置 + scrollTo(x: number, y: number, time?: number, easing?: object): void + // 滚动到指定的目标元素 + scrollToElement(el: HTMLElement | string, time?: number, offsetX?: number | boolean, offsetY?: number | boolean, easing?: object): void + // 立即停止当前运行的滚动动画 + stop(): void + // 销毁 better-scroll,解绑事件 + destroy(): void + + // 当我们做 slide 组件的时候,slide 通常会分成多个页面。调用此方法可以滚动到指定的页面。 + goToPage(x: number, y: number, time?: number, easing?: object): void + // 滚动到下一个页面 + next(time: number, easing: object): void + // 滚动到上一个页面 + prev(time: number, easing: object): void + // 获取当前页面的信息 + getCurrentPage(): void + // 当我们做 picker 组件的时候,调用该方法可以滚动到索引对应的位置 + wheelTo(index: number): void + // 获取当前选中的索引值 + getSelectedIndex(): void + // 当下拉刷新数据加载完毕后,需要调用此方法告诉 better-scroll 数据已加载 + finishPullDown(): void + // 当上拉加载数据加载完毕后,需要调用此方法告诉 better-scroll 数据已加载 + finishPullUp(): void + + // 监听事件 + on(type: string, fn: (evt?: any) => void): void; + off(type: string, fn?: (evt?: any) => void): void; +} + +declare module 'better-scroll' { + export default BScroll +} \ No newline at end of file diff --git a/types/better-scroll/tsconfig.json b/types/better-scroll/tsconfig.json new file mode 100644 index 0000000000..66f86c49cf --- /dev/null +++ b/types/better-scroll/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": false, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "better-scroll.test.ts" + ] +} \ No newline at end of file diff --git a/types/better-scroll/tslint.json b/types/better-scroll/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/better-scroll/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } From 3573d460f015158bb1302d6bd910a87940447b5c Mon Sep 17 00:00:00 2001 From: linxiaowu66 Date: Mon, 30 Oct 2017 18:53:31 +0800 Subject: [PATCH 2/4] feat(better-scroll): fix some CI errors --- types/better-scroll/better-scroll-tests.ts | 2 + types/better-scroll/index.d.ts | 161 ++++++++++----------- types/better-scroll/tsconfig.json | 2 +- 3 files changed, 83 insertions(+), 82 deletions(-) diff --git a/types/better-scroll/better-scroll-tests.ts b/types/better-scroll/better-scroll-tests.ts index 239202cba7..ca7f0536bf 100644 --- a/types/better-scroll/better-scroll-tests.ts +++ b/types/better-scroll/better-scroll-tests.ts @@ -1,3 +1,5 @@ +import BScroll = require("better-scroll"); + const BScroll1 = new BScroll('#wrapper'); const BScroll2 = new BScroll('#wrapper', { scrollX: false, scrollY: false }); const BScroll3 = new BScroll('#wrapper', { diff --git a/types/better-scroll/index.d.ts b/types/better-scroll/index.d.ts index 4ba80fa483..559b21bba2 100644 --- a/types/better-scroll/index.d.ts +++ b/types/better-scroll/index.d.ts @@ -1,149 +1,148 @@ -// Type definitions for better-scroll.js v1.3.1 +// Type definitions for better-scroll.js 1.3 // Project: https://github.com/ustbhuangyi/better-scroll // Definitions by: linxiaowu66 // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 interface WheelOption { - selectedIndex?: number, - rotate?: number, - adjustTime?: number + selectedIndex?: number; + rotate?: number; + adjustTime?: number; } interface SlideOption { - loop?: boolean, - el?: Element, - threshold?: number, - stepX?: number, - stepY?: number, - listenFlick?: boolean + loop?: boolean; + el?: Element; + threshold?: number; + stepX?: number; + stepY?: number; + listenFlick?: boolean; } interface ScrollBarOption { - fade?: boolean + fade?: boolean; } interface PullDownOption { - threshold?: number, - stop?: number + threshold?: number; + stop?: number; } interface PullUpOption { - threshold?: number + threshold?: number; } -interface BsOption{ - startX?: number, - startY?: number, - scrollX?: boolean, - scrollY?: boolean, - freeScroll?: boolean, - directionLockThreshold?: number, - eventPassthrough?: string | boolean, - click?: boolean, - tap?: boolean, - bounce?: boolean, - bounceTime?: number, - momentum?: boolean, - momentumLimitTime?: number, - momentumLimitDistance?: number, - swipeTime?: number, - swipeBounceTime?: number, - deceleration?: number, - flickLimitTime?: number, - flickLimitDistance?: number, - resizePolling?: number, - probeType?: number, - preventDefault?: boolean, - preventDefaultException?: object, - HWCompositing?: boolean, - useTransition?: boolean, - useTransform?: boolean, - bindToWrapper?: boolean, - disableMouse?: boolean, - disableTouch?: boolean, +interface BsOption { + startX?: number; + startY?: number; + scrollX?: boolean; + scrollY?: boolean; + freeScroll?: boolean; + directionLockThreshold?: number; + eventPassthrough?: string | boolean; + click?: boolean; + tap?: boolean; + bounce?: boolean; + bounceTime?: number; + momentum?: boolean; + momentumLimitTime?: number; + momentumLimitDistance?: number; + swipeTime?: number; + swipeBounceTime?: number; + deceleration?: number; + flickLimitTime?: number; + flickLimitDistance?: number; + resizePolling?: number; + probeType?: number; + preventDefault?: boolean; + preventDefaultException?: object; + HWCompositing?: boolean; + useTransition?: boolean; + useTransform?: boolean; + bindToWrapper?: boolean; + disableMouse?: boolean; + disableTouch?: boolean; /** * for picker * wheel: { - * selectedIndex: 0, - * rotate: 25, + * selectedIndex: 0; + * rotate: 25; * adjustTime: 400 * } */ - wheel?: WheelOption | boolean, + wheel?: WheelOption | boolean; /** * for slide * snap: { - * loop?: boolean, - * el: domEl, - * threshold: 0.1, - * stepX: 100, - * stepY: 100, + * loop?: boolean; + * el: domEl; + * threshold: 0.1; + * stepX: 100; + * stepY: 100; * listenFlick: true * } */ - snap?: SlideOption | boolean, + snap?: SlideOption | boolean; /** * for scrollbar * scrollbar: { * fade: true * } */ - scrollbar?: ScrollBarOption | boolean, + scrollbar?: ScrollBarOption | boolean; /** * for pull down and refresh * pullDownRefresh: { - * threshold: 50, + * threshold: 50; * stop: 20 * } */ - pullDownRefresh?: PullDownOption | boolean, + pullDownRefresh?: PullDownOption | boolean; /** * for pull up and load * pullUpLoad: { * threshold: 50 * } */ - pullUpLoad?: PullUpOption | boolean + pullUpLoad?: PullUpOption | boolean; } declare class BScroll { - constructor (element: Element | string, options?: BsOption); + constructor(element: Element | string, options?: BsOption); // 重新计算 better-scroll,当 DOM 结构发生变化的时候务必要调用确保滚动的效果正常 - x: number - y: number + x: number; + y: number; - refresh(): void - // 启用 better-scroll, 默认 开启 - enable(): void + refresh(): void; + // 启用 better-scroll; 默认 开启 + enable(): void; // 禁用 better-scroll,DOM 事件(如 touchstart、touchmove、touchend)的回调函数不再响应 - disable(): void - // 相对于当前位置偏移滚动 x,y 的距离 - scrollBy(x: number, y: number, time?: number, easing?: object): void + disable(): void; + // 相对于当前位置偏移滚动 x;y 的距离 + scrollBy(x: number, y: number, time?: number, easing?: object): void; // 滚动到指定的位置 - scrollTo(x: number, y: number, time?: number, easing?: object): void + scrollTo(x: number, y: number, time?: number, easing?: object): void; // 滚动到指定的目标元素 - scrollToElement(el: HTMLElement | string, time?: number, offsetX?: number | boolean, offsetY?: number | boolean, easing?: object): void + scrollToElement(el: HTMLElement | string, time?: number, offsetX?: number | boolean, offsetY?: number | boolean, easing?: object): void; // 立即停止当前运行的滚动动画 - stop(): void + stop(): void; // 销毁 better-scroll,解绑事件 - destroy(): void + destroy(): void; // 当我们做 slide 组件的时候,slide 通常会分成多个页面。调用此方法可以滚动到指定的页面。 - goToPage(x: number, y: number, time?: number, easing?: object): void + goToPage(x: number, y: number, time?: number, easing?: object): void; // 滚动到下一个页面 - next(time: number, easing: object): void + next(time: number, easing: object): void; // 滚动到上一个页面 - prev(time: number, easing: object): void + prev(time: number, easing: object): void; // 获取当前页面的信息 - getCurrentPage(): void + getCurrentPage(): void; // 当我们做 picker 组件的时候,调用该方法可以滚动到索引对应的位置 - wheelTo(index: number): void + wheelTo(index: number): void; // 获取当前选中的索引值 - getSelectedIndex(): void + getSelectedIndex(): void; // 当下拉刷新数据加载完毕后,需要调用此方法告诉 better-scroll 数据已加载 - finishPullDown(): void + finishPullDown(): void; // 当上拉加载数据加载完毕后,需要调用此方法告诉 better-scroll 数据已加载 - finishPullUp(): void + finishPullUp(): void; // 监听事件 on(type: string, fn: (evt?: any) => void): void; off(type: string, fn?: (evt?: any) => void): void; } -declare module 'better-scroll' { - export default BScroll -} \ No newline at end of file +export = BScroll; diff --git a/types/better-scroll/tsconfig.json b/types/better-scroll/tsconfig.json index 66f86c49cf..2751a06e4a 100644 --- a/types/better-scroll/tsconfig.json +++ b/types/better-scroll/tsconfig.json @@ -19,6 +19,6 @@ }, "files": [ "index.d.ts", - "better-scroll.test.ts" + "better-scroll-tests.ts" ] } \ No newline at end of file From a2316cd3f6477f54b5fd0a6b9bbd88cdff9c8f9b Mon Sep 17 00:00:00 2001 From: linxiaowu66 Date: Mon, 13 Nov 2017 15:48:42 +0800 Subject: [PATCH 3/4] feat(better-scroll): tsconfig.json update config --- types/better-scroll/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/better-scroll/tsconfig.json b/types/better-scroll/tsconfig.json index 2751a06e4a..774ffc076f 100644 --- a/types/better-scroll/tsconfig.json +++ b/types/better-scroll/tsconfig.json @@ -7,7 +7,7 @@ ], "noImplicitAny": true, "noImplicitThis": true, - "strictNullChecks": false, + "strictNullChecks": true, "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ From 36fd482fc0189a0e751881bf6d979b44c439e517 Mon Sep 17 00:00:00 2001 From: linxiaowu66 Date: Mon, 13 Nov 2017 16:05:32 +0800 Subject: [PATCH 4/4] feat(better-scroll): tsconfig.json update config --- types/better-scroll/better-scroll-tests.ts | 36 ++++++++++++---------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/types/better-scroll/better-scroll-tests.ts b/types/better-scroll/better-scroll-tests.ts index ca7f0536bf..1c8f336f4f 100644 --- a/types/better-scroll/better-scroll-tests.ts +++ b/types/better-scroll/better-scroll-tests.ts @@ -13,16 +13,18 @@ const BScroll4 = new BScroll('#wrapper', { selectedIndex: 0, }, }); -const BScroll6 = new BScroll('#wrapper', { - snap: { - loop: false, - el: document.querySelector('div-test'), - threshold: 0.1, - stepX: 100, - stepY: 100, - listenFlick: true, - }, -}); +if (document.querySelector('div-test')) { + const BScroll6 = new BScroll('#wrapper', { + snap: { + loop: false, + el: document.querySelector('div-test')!, + threshold: 0.1, + stepX: 100, + stepY: 100, + listenFlick: true, + }, + }); +} const BScroll7 = new BScroll('#wrapper', { scrollbar: { fade: true, @@ -43,25 +45,25 @@ BScroll1.scrollTo(0, 100, 200); BScroll1.scrollToElement('selectedElement'); BScroll1.scrollToElement('selectedElement', 250); -BScroll1.scrollToElement(document.getElementById('selectedElement')); -BScroll1.scrollToElement(document.getElementById('selectedElement'), 250); +BScroll1.scrollToElement(document.getElementById('selectedElement')!); +BScroll1.scrollToElement(document.getElementById('selectedElement')!, 250); BScroll2.on('scrollStart', () => { console.log('scroll started'); }); -const BScroll9 = new BScroll(document.getElementById('wrapper')); -const BScroll10 = new BScroll(document.getElementById('wrapper'), { freeScroll: true }); -const BScroll11 = new BScroll(document.getElementById('wrapper'), { +const BScroll9 = new BScroll(document.getElementById('wrapper')!); +const BScroll10 = new BScroll(document.getElementById('wrapper')!, { freeScroll: true }); +const BScroll11 = new BScroll(document.getElementById('wrapper')!, { preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/, }, }); -const BScroll12 = new BScroll(document.getElementById('wrapper'), { +const BScroll12 = new BScroll(document.getElementById('wrapper')!, { preventDefaultException: { className: /(^|\s)test(\s|$)/, }, }); -const BScroll13 = new BScroll(document.getElementById('wrapper'), { +const BScroll13 = new BScroll(document.getElementById('wrapper')!, { swipeBounceTime: 1000, });