最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • better-scroll 源码分析(一):概览

    正文概述 掘金(摩托车维修艺术)   2021-01-21   604

    初衷

    黄奕大佬的开源项目 better-scroll 写挺好的,不过用起来总是感觉不太方便。为了知道原因,有必要去深究一下。 由于篇幅原因,本篇将只对源码做一个简单的概览,具体实现将在后面进行分析。

    整体架构

    ├── better-scroll
    ├── core
    ├── infinity
    ├── mouse-wheel
    ├── movable
    ├── nested-scroll
    ├── observe-dom
    ├── pull-down
    ├── pull-up
    ├── scroll-bar
    ├── shared-utils
    ├── slide
    ├── vuepress-docs
    ├── wheel
    └── zoom
    

    采用了可插拔式架构,core是插座,infinity/mouse-wheel等是插件

    better-scroll

    先来看 better-scroll 文件夹下的实现。

    import BScroll from '@better-scroll/core'
    import MouseWheel from '@better-scroll/mouse-wheel'
    // ...
    
    export {
      createBScroll,
      BScrollInstance,
      Options,
      CustomOptions,
      TranslaterPoint,
      MountedBScrollHTMLElement,
      Behavior,
      Boundary,
      CustomAPI
    } from '@better-scroll/core'
    
    export {
      MouseWheel,
      // ...
    }
    
    BScroll.use(MouseWheel)
    // ...
    
    export default BScroll
    
    

    整体上是起着一个统一导出的作用,注意 BScroll.use() 的使用,说明该包具备完整的插件能力,当然整体体积也偏大,如果不需要插件能力或者只需要使用到部分插件,那么不推荐使用该包。

    core

    这是 better-scroll 的核心代码,承载了 better-scroll 的核心滚动能力。

    core源码结构

    src
    ├── BScroll.ts
    ├── Instance.ts
    ├── Options.ts
    ├── animater
    │   ├── Animation.ts
    │   ├── Base.ts
    │   ├── Transition.ts
    │   └── index.ts
    ├── base
    │   └── ActionsHandler.ts
    ├── index.ts
    ├── scroller
    │   ├── Actions.ts
    │   ├── Behavior.ts
    │   ├── DirectionLock.ts
    │   ├── Scroller.ts
    │   └── createOptions.ts
    ├── translater
    │   └── index.ts
    └── utils
        ├── bubbling.ts
        ├── compare.ts
        └── typesHelper.ts
    

    core源码入口

    // index.ts
    
    import { BScroll } from './BScroll'
    
    export { BScrollInstance } from './Instance'
    export { Options, CustomOptions } from './Options'
    export { TranslaterPoint } from './translater'
    export { MountedBScrollHTMLElement } from './BScroll'
    export { Behavior, Boundary } from './scroller/Behavior'
    export { createBScroll, CustomAPI } from './BScroll'
    
    export default BScroll
    
    

    可以看到核心代码位于BScroll.ts,该文件主要作用便是导出BScrollConstructor

    // BScroll.ts
    export class BScrollConstructor<O = {}> extends EventEmitter {
      static plugins: PluginItem[] = []
      static pluginsMap: PluginsMap = {}
      scroller: Scroller
      options: OptionsConstructor
      hooks: EventEmitter
      plugins: { [name: string]: any }
      wrapper: HTMLElement
      content: HTMLElement
      [key: string]: any
    
      static use(ctor: PluginCtor) {}
      constructor(el: ElementParam, options?: Options & O) {}
      init() {}
      refresh() {}
      enable() {}
      disable() {}
      destroy() {}
      eventRegister() {}
      // ...
    }
    
    

    插件

    根据 core 中的源码来看,一个 better-scroll 插件必须包含一个静态属性 pluginName,用于作为插件的唯一标识。当然这篇文章不会重点去研究插件的实现,感兴趣的小伙伴可以自己研究。

    export default class MouseWheel {
      static pluginName = 'mouseWheel'
    }
    

    shared-utils

    这是公用的一些工具,后面会结合源码一起享用。

    小结

    那我们现在应该清楚了better-scroll基本架构,core作为滚动的核心部分,扮演着重要的角色,接下来的文章将会终点分析改目录下的源码~


    起源地下载网 » better-scroll 源码分析(一):概览

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元