Giter Club home page Giter Club logo

mjrefresh's Introduction

MJRefresh

SPM supported Carthage compatible podversion

  • An easy way to use pull-to-refresh

📜✍🏻Release Notes: more details

Contents

New Features

Dynamic i18n Switching

Now MJRefresh components will be rerendered automatically with MJRefreshConfig.default.language setting.

Example

Go i18n folder and see lots of cases. Simulator example is behind i18n tab in right-top corner.

Setting language

MJRefreshConfig.default.language = "zh-hans"

Setting i18n file name

MJRefreshConfig.default.i18nFilename = "i18n File Name(not include type<.strings>)"

Setting i18n language bundle

MJRefreshConfig.default.i18nBundle = <i18n Bundle>

Adopting the feature in your DIY component

  1. Just override i18nDidChange function and reset texts.
// must use this localization methods
Bundle.mj_localizedString(forKey: "")
// or
Bundle.mj_localizedString(forKey: "", value:"")

override func i18nDidChange() {
    // Reset texts function
    setupTexts()
    // Make sure to call super after resetting texts. It will call placeSubViews for applying new layout.
    super.i18nDidChange()
}
  1. Receiving MJRefreshDidChangeLanguageNotification notification.

SPM Supported

Released from 3.7.1

Swift Chaining Grammar Supported

  // Example as MJRefreshNormalHeader
  func addRefreshHeader() {
      MJRefreshNormalHeader { [weak self] in
  	  // load some data
      }.autoChangeTransparency(true)
      .link(to: tableView)
  }

Support what kinds of controls to refresh

  • UIScrollViewUITableViewUICollectionViewWKWebView

How to use MJRefresh

  • Installation with CocoaPods:pod 'MJRefresh'
  • Installation with Carthagegithub "CoderMJLee/MJRefresh"
  • Manual import:
    • Drag All files in the MJRefresh folder to project
    • Import the main file:#import "MJRefresh.h"
Base                        Custom
MJRefresh.bundle            MJRefresh.h
MJRefreshConst.h            MJRefreshConst.m
UIScrollView+MJExtension.h  UIScrollView+MJExtension.m
UIScrollView+MJRefresh.h    UIScrollView+MJRefresh.m
UIView+MJExtension.h        UIView+MJExtension.m

More than hundreds of Apps are using MJRefresh

* More information of App can focus on:[M了个J-博客园](http://www.cnblogs.com/mjios/p/4409853.html)

The Class Structure Chart of MJRefresh

  • The class of red text in the chart:You can use them directly

    • The drop-down refresh control types
      • Normal:MJRefreshNormalHeader
      • Gif:MJRefreshGifHeader
    • The pull to refresh control types
      • Auto refresh
        • Normal:MJRefreshAutoNormalFooter
        • Gif:MJRefreshAutoGifFooter
      • Auto Back
        • Normal:MJRefreshBackNormalFooter
        • Gif:MJRefreshBackGifFooter
  • The class of non-red text in the chart:For inheritance,to use DIY the control of refresh

  • About how to DIY the control of refresh,You can refer the Class in below Chart

MJRefreshComponent.h

/** The Base Class of refresh control */
@interface MJRefreshComponent : UIView
#pragma mark -  Control the state of Refresh 

/** BeginRefreshing */
- (void)beginRefreshing;
/** EndRefreshing */
- (void)endRefreshing; 
/** IsRefreshing */
- (BOOL)isRefreshing;

#pragma mark - Other
/** According to the drag ratio to change alpha automatically */
@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
@end

MJRefreshHeader.h

@interface MJRefreshHeader : MJRefreshComponent
/** Creat header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** Creat header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;

/** This key is used to storage the time that the last time of drown-down successfully */
@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
/** The last time of drown-down successfully */
@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;

/** Ignored scrollView contentInset top */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
@end

MJRefreshFooter.h

@interface MJRefreshFooter : MJRefreshComponent
/** Creat footer */
+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** Creat footer */
+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;

/** NoticeNoMoreData */
- (void)noticeNoMoreData;
/** ResetNoMoreData(Clear the status of NoMoreData ) */
- (void)resetNoMoreData;

/** Ignored scrollView contentInset bottom */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
@end

MJRefreshAutoFooter.h

@interface MJRefreshAutoFooter : MJRefreshFooter
/** Is Automatically Refresh(Default is Yes) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;

/** When there is much at the bottom of the control is automatically refresh(Default is 1.0,Is at the bottom of the control appears in full, will refresh automatically) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
@end

MJRefreshTrailer.h

@interface MJRefreshTrailer : MJRefreshComponent

/** 创建trailer */
+ (instancetype)trailerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock;
/** 创建trailer */
+ (instancetype)trailerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;

/** 忽略多少scrollView的contentInset的right */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetRight;

@end

Reference

* Due to there are more functions of this framework,Don't write specific text describe its usage
* You can directly reference examples MJTableViewController、MJCollectionViewController、MJWebViewController,More intuitive and fast.

The drop-down refresh 01-Default

self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically 
}];
或
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadNewData])
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

// Enter the refresh status immediately
[self.tableView.mj_header beginRefreshing];

(下拉刷新01-普通)

The drop-down refresh 02-Animation image

// Set the callback(一Once you enter the refresh status,then call the action of target,that is call [self loadNewData])
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Set the ordinary state of animated images
[header setImages:idleImages forState:MJRefreshStateIdle];
// Set the pulling state of animated images(Enter the status of refreshing as soon as loosen)
[header setImages:pullingImages forState:MJRefreshStatePulling];
// Set the refreshing state of animated images
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// Set header
self.tableView.mj_header = header;

(下拉刷新02-动画图片)

The drop-down refresh 03-Hide the time

// Hide the time
header.lastUpdatedTimeLabel.hidden = YES;

(下拉刷新03-隐藏时间)

The drop-down refresh 04-Hide status and time

// Hide the time
header.lastUpdatedTimeLabel.hidden = YES;

// Hide the status
header.stateLabel.hidden = YES;

(下拉刷新04-隐藏状态和时间0)

The drop-down refresh 05-DIY title

// Set title
[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];

// Set font
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];

// Set textColor
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];

(下拉刷新05-自定义文字)

The drop-down refresh 06-DIY the control of refresh

self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Implementation reference to MJDIYHeader.h和MJDIYHeader.m

(下拉刷新06-自定义刷新控件)

The pull to refresh 01-Default

self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
    //Call this Block When enter the refresh status automatically
}];
或
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData])
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

(上拉刷新01-默认)

The pull to refresh 02-Animation image

// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData])
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

// Set the refresh image
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];

// Set footer
self.tableView.mj_footer = footer;

(上拉刷新02-动画图片)

The pull to refresh 03-Hide the title of refresh status

// Hide the title of refresh status
footer.refreshingTitleHidden = YES;
// If does have not above method,then use footer.stateLabel.hidden = YES;

(上拉刷新03-隐藏刷新状态的文字)

The pull to refresh 04-All loaded

//Become the status of NoMoreData
[footer noticeNoMoreData];

(上拉刷新04-全部加载完毕)

The pull to refresh 05-DIY title

// Set title
[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];
[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];

// Set font
footer.stateLabel.font = [UIFont systemFontOfSize:17];

// Set textColor
footer.stateLabel.textColor = [UIColor blueColor];

(上拉刷新05-自定义文字)

The pull to refresh 06-Hidden After loaded

//Hidden current control of the pull to refresh
self.tableView.mj_footer.hidden = YES;

(上拉刷新06-加载后隐藏)

The pull to refresh 07-Automatic back of the pull01

self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

(上拉刷新07-自动回弹的上拉01)

The pull to refresh 08-Automatic back of the pull02

MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

// Set the normal state of the animated image
[footer setImages:idleImages forState:MJRefreshStateIdle];
//  Set the pulling state of animated images(Enter the status of refreshing as soon as loosen)
[footer setImages:pullingImages forState:MJRefreshStatePulling];
// Set the refreshing state of animated images
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];

// Set footer
self.tableView.mj_footer = footer;

(上拉刷新07-自动回弹的上拉02)

The pull to refresh 09-DIY the control of refresh(Automatic refresh)

self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Implementation reference to MJDIYAutoFooter.h和MJDIYAutoFooter.m

(上拉刷新09-自定义刷新控件(自动刷新))

The pull to refresh 10-DIY the control of refresh(Automatic back)

self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Implementation reference to MJDIYBackFooter.h和MJDIYBackFooter.m

(上拉刷新10-自定义刷新控件(自动回弹))

UICollectionView01-The pull and drop-down refresh

// The drop-down refresh
self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically 
}];

// The pull to refresh
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];

(UICollectionView01-上下拉刷新)

UICollectionView02-The trailer refresh

// The trailer refresh
self.collectionView.mj_trailer = [MJRefreshNormalTrailer trailerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically 
}];

(UICollectionView02-左拉刷新)

WKWebView01-The drop-down refresh

//Add the control of The drop-down refresh
self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];

(UICollectionView01-上下拉刷新)

Remind

  • ARC
  • iOS>=9.0
  • iPhone \ iPad screen anyway

寻求志同道合的小伙伴

  • 因本人工作忙,没有太多时间去维护MJRefresh,在此向广大框架使用者说声:非常抱歉!😞
  • 现寻求志同道合的小伙伴一起维护此框架,有兴趣的小伙伴可以发邮件给我,非常感谢😊
  • 如果一切OK,我将开放框架维护权限(github、pod等)
  • 目前已经找到3位小伙伴(^-^)V

mjrefresh's People

Contributors

520dev avatar batkov avatar codermjlee avatar csc-ericwu avatar ftp27 avatar godera avatar gosicfly avatar hyolveun avatar itofu avatar jessecoding avatar jianyeee avatar jiasongs avatar jjksam avatar jonyfang avatar k6f avatar kinarobin avatar russellyi avatar shicang1990 avatar sinkup avatar sxdxzkq avatar unknown-undefined avatar vancucit avatar vincentsit avatar wenchaod avatar wimbledon avatar wolfcon avatar xingheng avatar yutinglei avatar zld avatar zwf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mjrefresh's Issues

pod MJRefresh   少了几个文件

MJRefreshGifFooter.h MJRefreshGifFooter.m
MJRefreshGifHeader.h MJRefreshGifHeader.m 这几个文件都不存在 下载的zip 包中还是存在的。但但是pod自动导入 没有这几个文件

下拉刷新页面闪烁

下拉刷新时,如果动作幅度比较大,不等scrollview停止滑动即松手刷新,会发现页面闪烁

在MJRefreshHeaderView.m的observeValueForKeyPath监听MJRefreshContentOffset

NSLog(@"%f", self.scrollView.mj_contentOffsetY);

会发现offset持续变小后突然变为-64,然后再变小,最后维持在-64

我修改了一下

} else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开
// 开始刷新
CGFloat top = self.scrollViewOriginalInset.top + self.mj_height;
if (currentOffsetY >= -top) {
self.state = MJRefreshStateRefreshing;
}
}

在设置状态变为MJRefreshStatePulling的时候判断下当前offset是否已经大于
header高度,在这个条件满足的情况下刷新就不会出现offset突变为-64再变小的问题了

下拉刷新停止bug

多次调用下拉刷新停止方法如下:
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView headerEndRefreshing];
[self.tableView headerEndRefreshing];
[self.tableView headerEndRefreshing];
[self.tableView headerEndRefreshing];
});
会导致tableView整体上移。

下拉刷新删除全部数据的话崩溃

当在tabVIew 里在下啦刷新的方法里把所有数据全部删除的话,程序会崩溃;或者把所有数据全部删除,在从网络异步获取的话也会出问题。
*** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit/UIKit-2935.138/UITableView.m:6509

MJ哥 关于下拉刷新

MJ哥 您好, 我用了你的下拉刷新控件, 如果想让控制器一加载就自动刷新 , 需要将
[self.tableView headerBeginRefreshing]; 放在 [self.tableView addHeaderWithTarget:self action:@selector(refreshStart)]; 后面才能 正常自动 刷新, 这个算不算个小Bug呀

缺少分页功能

现在使用了一下,一般使用上提刷新是想获取分页的数据,现在不支持分页,无法获取当前是哪页,而且如果当这页没数据时也没显示已到底这样的标识。
希望能支持翻页功能。谢谢

点击事件调用headerBeginRefreshing Top 值还是会不断累加

//self.scrollView.mj_contentInsetTop -= self.mj_height;
改为 即可
self.scrollView.mj_contentInsetTop = self.scrollViewOriginalInset.top;

事件还原
循环点击某个Item 项然后执行
headerBeginRefreshing
完成之后 调用
headerEndRefreshing
Top会不断累加

能用这个框架实现对普通UIViewController的刷新吗?

MJ您好,在项目中用了你的MJRefresh感觉很方便,但不知这个框架能不能对普通UIViewController进行刷新呢,实现像对TableView进行上拉,下拉时的效果。这要很多页面中就不需要加个刷新按钮了。
谢谢了。

杰哥,我gitHub用的比较菜,这里有俩意见

1.nav后面的刷新控件在停止刷新时(didFinishRefresh),最好,alpha = 0
在willBeginRefresh的时候,alpaca = 1即可

2.可以增加接口.自定义不同的下拉动画和刷新动画,可以传入图片数组or自定义的Gif图

杰哥,我gitHub用的比较菜,会加油帮忙完善框架的

注册刷新控件问题

[self.tableView registerClass:[RecommedTableViewCell class] forCellReuseIdentifier:@"identifier"];

如果执行了这行,刷新的数据能重新下载下来,但是界面是空白的。
注释了 反而正常的。
这行代码可以不写吗?

MJRefreshHeaderView.m Crash

MJRefreshHeaderView.m中
当我用 UICollectionView 时
第一次有数据
刷新后
当数据源请求返回为空时,

            // 保存刷新时间
            [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
                self.scrollView.contentInsetTop = self.scrollViewOriginalInset.top;
            }];

这一句会Crash

一点小bug

如果当前控制器的automaticallyAdjustsScrollViewInsets为yes,并且生效的时候。如果正在刷新状态中,点击cell进入下个控制器,再pop回来的时候tableview的contentinset的top会变成128。您可以将navigation bar的背景图片去掉后,这个automaticallyAdjustsScrollViewInsets就生效了。然后就会出现我说的这种情况

头部动态改变

头部的视图内容可以自定义吗?可以动态改变吗?
例如:
部分页面需要加入文字描述,部分页面不需要文字,只需要loading动画。

被坑了吗,用block方式controller一直不能被释放

用block方式controller一直不能被释放

/**

  • 刷新控件
    */

  • (void)setupRefresh
    {
    __weak __typeof(&*self)weakSelf = self;
    [self.tableView addHeaderWithCallback:^{

    //加载数据
    [weakSelf refreshTableView:YES];
    [weakSelf.tableView headerEndRefreshing];
    }];

[self.tableView addFooterWithCallback:^{
[weakSelf refreshTableView:NO];
[weakSelf.tableView footerEndRefreshing];
}];
}

以上是我用的方式,然而我的controller却不能被释放了,换回delegate方法一切正常。

国际化

MJRefreshConst中文字有办法国际化吗?

可不可以不显示最后更新时间?

MJ老师您好!
库中提供了这两个方法:

  • (void)addHeaderWithCallback:(void (^)())callback;
  • (void)addHeaderWithCallback:(void (^)())callback dateKey:(NSString*)dateKey;
    先以为第一个方法不会显示时间,第二个会显示更新时间。但却是两个都要显示更新时间。有没有方法可以设置不显示更新时间呢?

还有,MJ老师,这个除了可以自定义刷新时的文字,还可以自定义刷新时的headerView么?比如像SVPullToRefresh一样有这样的方法:
[scrollView.pullToRefreshView setCustomView:label2 forState:SVPullToRefreshStateTriggered];
[scrollView.pullToRefreshView setCustomView:label3 forState:SVPullToRefreshStateLoading];
[scrollView.pullToRefreshView setCustomView:label1 forState:SVPullToRefreshStateStopped];
这个刷新库用起来非常方便,就是可自定义的东西比较少,持续关注

如果不想要那个上拉时的时间

产品经理说要简洁,给那个时间也没有用户去关注到底上次的刷新是什么时候,所以要我取消那个时间,我觉得这个时间应该有个枚举值,分为 有时间的label和只有状态的label. 因为我屏蔽了时间的label的代码时,高度没有和那个刷新圆圈对齐,费了好大的劲才改了样式

回调方法错误

objc_msgSend(msgTarget(self.beginRefreshingTaget, self.beginRefreshingAction, self);

原因:
Too many arguments to function call, expected0, have3.

快速下拉crash

控件快速下拉,当拉到最下面的时候,程序会crash。

ios8编译的一些错误与警告

MJRefreshHeaderView.m (warning)

NSUInteger unitFlags = NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit |NSMinuteCalendarUnit;

修改为

NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;

MJRefreshBaseView.m (error)

objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self);

改为

((void(*)(id, SEL, id))objc_msgSend)(self.beginRefreshingTaget, self.beginRefreshingAction, self);

非ARC项目使用此库出现无法释放的问题

image
已设置强制使用ARC选项,大概流程是这样

MainView -> loadTableView(with MJRefresh)

MainView -> [_tableView removeFromSuperView];

_tableView dealloc not called.

image

如果注释addHeader和addFooter则可以正常dealloc

[bug] 下拉刷新过程中滚动tableview会导致第二个section悬空

我的tableview有两个section,第二个section的header有标题,滚动的时候这个header会一直显示紧贴navigator bar。现在刷新的时候,滚动table,第二个section的header会悬空,跟navigator bar有一段距离,table cell的内容从这个header下面穿过去了。这应该是个bug吧?

使用demo的时候报警告

[self performSelector:NSSelectorFromString(self.method) withObject:nil];

performSelector may cause a leak because its selector is unknown

找不到header

我用的scrollView,为什么end之后header不显示了,用的auto layout。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.