javascript - 在 Angular 2/Typescript 中使用 IScroll

标签 javascript angularjs typescript angular ionic2

我想使用一个名为 iscroll 的 Javascript 库。

到目前为止,我得到了 iscroll.d.ts,现在我想使用它,但我是 typescript 的新手,不知道该怎么做。

我的 iscroll.d.ts 看起来像这样:

// Generated by typings
// Source: https://raw.githubusercontent.com/types/typed-iscroll/8524f7c88e521c16462553173c9ea99e9e3d477c/iscroll.d.ts
declare module 'iscroll' {
class IScroll {
  version: string;

  constructor(element: string | HTMLElement, options?: IScroll.IScrollOptions);

  destroy(): void;
  resetPosition(time: number): boolean;
  disable(): void;
  enable(): void;
  refresh(): void;
  scrollTo(x: number, y: number, time?: number, easing?: IScroll.IScrollEaseOption): void;
  scrollBy(x: number, y: number, time?: number, easing?: IScroll.IScrollEaseOption): void;
  scrollToElement(el: HTMLElement | string, time?: number, offsetX?: number, offsetY?: number, easing?: IScroll.IScrollEaseOption): void;
  goToPage(x: number, y: number, time?: number, easing?: IScroll.IScrollEaseOption): void;
  prev(): void;
  next(): void;
  zoom(scale: number, x: number, y: number, time?: number): void;
  refresh(): void;
  destroy(): void;

  utils: IScroll.IScrollUtils;

  // Events
  on(type: 'beforeScrollStart' |
    'scrollCancel' |
    'scrollStart' |
    'scrollEnd' |
    'flick' |
    'zoomStart' |
    'zoomEnd', fn: (evt?: any) => void): void;
  off(type: string, fn?: (evt?: any) => void): void;

}

namespace IScroll {
  export interface IScrollIndicatorOptions {
    el?: HTMLElement | string;
    fade?: boolean;
    ignoreBoundaries?: boolean;
    interactive?: boolean;
    listenX?: boolean;
    listenY?: boolean;
    resize?: boolean;
    shrink?: boolean;
    speedRatioX?: number;
    speedRatioY?: number;
  }

  export interface IScrollKeyBindings {
    pageUp?: number | string,
    pageDown: number | string;
    end: number | string;
    home: number | string;
    left: number | string;
    up: number | string;
    right: number | string;
    down: number | string;
  }

  export interface IScrollOptions {

    indicators?: IScrollIndicatorOptions;

    // Scrollbar
    scrollbars?: boolean | string;
    fadeScrollbars?: boolean;
    interactiveScrollbars?: boolean;
    resizeScrollbars?: boolean;
    shrinkScrollbars?: boolean;

    // Zoom
    zoom?: boolean;
    zoomMin?: number;
    zoomMax?: number;
    startZoom?: number;
    wheelAction?: string;

    snap?: boolean | string;

    bindToWrapper?: boolean;
    bounceEasing?: string | IScrollEaseOption;
    bounceTime?: number;
    deceleration?: number;
    mouseWheelSpeed?: number;
    preventDefaultException?: any;
    resizePolling?: number;
    probeType?: number;
    keyBindings?: boolean | IScrollKeyBindings;

    useTransform?: boolean;
    useTransition?: boolean;
    HWCompositing?: boolean;
    bounce?: boolean;
    click?: boolean;
    disableMouse?: boolean;
    disablePointer?: boolean;
    disableTouch?: boolean;
    eventPassthrough?: boolean;
    freeScroll?: boolean;
    invertWheelDirection?: boolean;
    momentum?: boolean;
    mouseWheel?: boolean;
    preventDefault?: boolean;
    tap?: boolean | string;

    scrollX?: number;
    scrollY?: number;
    startX?: number;
    startY?: number;

    // Infinite options
    infiniteElements: HTMLElement | 'string';
    cacheSize: number;
    dataset: (start: number, count: number) => Object[];
  }

  export interface IScrollEaseOption {
    style: 'string';
    fn: Function;
  }
  export interface IScrollEaseOptions {
    quadratic: IScrollEaseOption;
    circular: IScrollEaseOption;
    back: IScrollEaseOption;
    bounce: IScrollEaseOption;
    elastic: IScrollEaseOption;
  }

  export interface IScrollUtils {
    ease: IScrollEaseOptions;
  }
}

export = IScroll;
}

我的 Angular 2 page.ts 看起来像这样:

import {NavController} from "ionic-angular";
import {AngularFire, AuthProviders, AuthMethods } from "angularfire2";
import {OnInit, Inject, Component} from "@angular/core";
import {UserService} from '../../../services/UserService';
import {AuthPage} from "../home/home";
import { IScroll } from "iscroll"

@Component({
    templateUrl: "build/pages/auth/onboarding/onboarding.html",
    providers: [UserService]
})

export class OnboardingPage {

    iScroll: IScroll;

    onboardingStep: number = 1;

到目前为止,我认为导入工作正常,但我不知道如何初始化和使用 iscroll。

希望你们中的一些人得到了如何实现它的任何提示:)

最佳答案

您可以像在普通的旧 javascript 中使用它一样使用它,不同之处在于您还可以包含类型。

例如,javascript:

let myScroll = new IScroll("#CONTAINER_ID");

typescript :

let myScroll: IScroll = new IScroll("#CONTAINER_ID");

(注意 : IScroll 不是必需的,编译器可以推断类型,但我添加它是为了说明一点)

在你的情况下:

export class OnboardingPage {
    iScroll: IScroll;

    constructor() {
        this.iScroll = new IScroll("#CONTAINER_ID");
    }
}

此代码基于他们的文档 (https://github.com/cubiq/iscroll),但根据您发布的 .d.ts 文件,它需要使用 iscroll 命名空间:

let myScroll = new iscroll.IScroll("#CONTAINER_ID");

希望这对您有所帮助。

关于javascript - 在 Angular 2/Typescript 中使用 IScroll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551237/

相关文章:

javascript - 数据表排序不适用于 dd-mm-yyyy 格式

Angular 4/Ionic 3 - 使用 Protractor 创建模拟服务

Javascript 四舍五入到最接近的整数

javascript - 无法调用 determinedVisibility() 从未见过 PID 的连接

javascript - javascript对象中特定属性的总和值

javascript - 如何对 TypeScript 类执行 Joi 验证?

node.js - tslint 错误 - 阴影名称 : 'err'

javascript - 将 require 与相对路径一起使用

angularjs - ui-grid 使用外部分页并导出数据

javascript - 如何延迟计数器直到动画完成