diff --git a/types/better-scroll/better-scroll-tests.ts b/types/better-scroll/better-scroll-tests.ts new file mode 100644 index 0000000000..1c8f336f4f --- /dev/null +++ b/types/better-scroll/better-scroll-tests.ts @@ -0,0 +1,70 @@ +import BScroll = require("better-scroll"); + +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, + }, +}); +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, + }, +}); + +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..559b21bba2 --- /dev/null +++ b/types/better-scroll/index.d.ts @@ -0,0 +1,148 @@ +// 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; +} + +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; +} + +export = BScroll; diff --git a/types/better-scroll/tsconfig.json b/types/better-scroll/tsconfig.json new file mode 100644 index 0000000000..774ffc076f --- /dev/null +++ b/types/better-scroll/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "better-scroll-tests.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" }