惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
爱范儿
爱范儿
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 叶小钗
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
博客园 - 司徒正美
博客园 - 【当耐特】
IT之家
IT之家

zodream梦想开源/个人编程日记

文件解析笔记-zodream梦想开源/个人编程日记 密码本开发笔记之读写与保存-zodream梦想开源/个人编程日记 SkiaSharp 把 pixel byte[] 转成 SKBitmap-zodream梦想开源/个人编程日记 nas 使用 Docker 安装 gogs-zodream梦想开源/个人编程日记 复制 android 手机中的文件到电脑-zodream梦想开源/个人编程日记 周报:寻找优质的周刊-zodream梦想开源/个人编程日记 开发日志:对Markdown的代码块新增引用来源支持-zodream梦想开源/个人编程日记 周报:怎么写技术类的教程文章-zodream梦想开源/个人编程日记 css display:flex 布局尺寸超出问题-zodream梦想开源/个人编程日记 周报:SEO优化的思考-zodream梦想开源/个人编程日记 Edge 浏览器不适用 Edge Image Viewer 打开图片 -zodream梦想开源/个人编程日记 SEO 学习笔记(一) 内容来源-zodream梦想开源/个人编程日记 PHP 实现双因素身份认证(2FA)-zodream梦想开源/个人编程日记 WPF MVVM 获取List 多选数据-zodream梦想开源/个人编程日记 Burp Suite 抓包-zodream梦想开源/个人编程日记 使用 indexnow 注意事项-zodream梦想开源/个人编程日记 Godot 使用字体图标 例如: Iconfont、FontAwesome-zodream梦想开源/个人编程日记 angular 15 对指定页面进行访问限制-zodream梦想开源/个人编程日记 CSS 使用 column-count 实现瀑布流出现内容分割的解决办法-zodream梦想开源/个人编程日记 input 确认按键事件在手机端不生效-zodream梦想开源/个人编程日记 C# 使用socket 进行通讯-zodream梦想开源/个人编程日记 Maui开发中Windows应用开启管理员权限-zodream梦想开源/个人编程日记 Maui 中自定义控件-zodream梦想开源/个人编程日记 angular 14 使用 ng-template 实现tree 结构显示-zodream梦想开源/个人编程日记 c# 动态安装和卸载dll-zodream梦想开源/个人编程日记 慎用 CompositionTarget.Rendering-zodream梦想开源/个人编程日记 c# 重写 c++ 程序笔记:数据初始化-zodream梦想开源/个人编程日记 源码编译 aseprite-zodream梦想开源/个人编程日记 记录一下字符串分隔split各语言之间的不同-zodream梦想开源/个人编程日记 c# Gzip解码无头内容-zodream梦想开源/个人编程日记
使用 typescript 写 jQuery 插件-zodream梦想开源/个人编程日记
zodream · 2017-10-28 · via zodream梦想开源/个人编程日记

思路

  1. 可以接受的参数
  2. 默认的参数
  3. 挂载在 JQuery

步骤

  1. 参数接口

配置的接口,在js中无用,这里只是为了以后 TS 使用方便,方便智能提示和书写,

interface CarouselOptions {
     range?: number, // 每次移动的距离,默认一个item宽度
     itemTag?: string, // 子代的标签
     boxTag?: string, // 盒子的标签
     spaceTime?: number, // 停顿的时间
     animationTime?: string|number, // 动画执行时间
     animationMode?: string, // 动画效果
     previousTag?: string, // 可点击向前的元素
     nextTag?: string, // 可点击向后的元素
     thumbMode?: string // 缩略图模式
}

1234567891011

  1. 默认参数
class CarouselDefaultOptions implements CarouselOptions {
     itemTag: string = 'li';
     boxTag: string = '.carousel-box';
     spaceTime: number = 3000;
     animationTime: string|number = 1000;
     animationMode: string = "swing";
     previousTag: string = '.carousel-previous';
     nextTag: string = '.carousel-next';
}

12345678910

插件具体功能实现

/// 
class Carousel {
    constructor(
        public element: JQuery,
        options?: CarouselOptions
    ) {
        this.options = $.extend({}, new CarouselDefaultOptions(), options); // 合并参数
        this._init(); // 初始化,包括长度不足循环补足
        this._addEvent(); // 绑定事件
    }

    // 下一张
    public next(range: number = this.options.range) {
        this.goLeft(this._left - range);
    }

    // 上一张
    public previous(range: number = this.options.range) {
        this.goLeft(this._left + range);
    }
}

123456789101112131415161718192021

  1. 挂载在 JQuery
;(function($: any) {
    $.fn.carousel = function(options ?: CarouselOptions) {
        return new Carousel(this, options); 
    };
})(jQuery);

12345

--- 用typescript 写 js 一目了然

转载请保留原文链接: https://zodream.cn/blog/id/10.html