npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nuke-tab-slider

v1.0.0

Published

滑动切换tab

Downloads

20

Readme

tabSlider 1.0.0

重构了原有tabSlider的底层实现,自定义程度更高。

综述

TabSlider: 横滑交互组件

API说明

属性

|名称|类型|默认值|描述|是否必填| |:---------------|:--------|:----|:----------|:----------| |tabList|Array|null|内容列表,一个item对应一个tab|是| |itemWidthList|Array|null|每一个头部tab item的宽度,用以计算切换时滚动的距离|是| |tabStyle|Object|null|头部tab的样式,scrollview父容器的样式|是| |tabInnerStyle|Object|null|头部tab内容的样式,scrollview的样式|是| |tabFocusStyle|Object|null|选中tab item的样式,使用了该样式时,会增加选中tab的动画|否| |renderTabItem|Function|null|渲染每一个tab item的方法|是| |renderPage|Function|null|渲染每一个tab对应主体内容的方法|是| |renderNav|Function|null|渲染每一个tab nav的方法,对应着头条的下拉展示更多|否| |renderLoading|Function|null|作用于非当前页,用于渲染loading提示|否| |tabClickCallback|Function|null|点击头部tab或者切换列表内容时的回调函数|否| |pageTop|Number|取tabStyle或者tabInnerStyle的高度|tab内容距离头部的高度|否| |sidesDisablePan|Boolean|false|第一帧禁止往左滑动,最后一帧禁止往右滑动|否| | active| number | false | 默认初始化的tab | 否 | | navTop | bool | false | tab nav在头部还是在底| 否 | | width | number | 750 | tab渲染宽度,默认全屏| 否 | | height | number | 全屏 | tab渲染高度,默认包含tab nav全屏 |否|

事件

|名称|类型|默认值|描述|是否必填| |:---------------|:--------|:----|:----------|:----------| | onChange | Function | null | 点击头部tab或者切换列表内容时的回调函数 | 否 |

方法

this.refs.TabSlider.slideTo(2)

  • 用于从外部主动切换到对应的tab项

布局说明

tabSlider的布局是使用绝对定位布局,大致的布局方式如下图。所以,使用该组件时,需要在tabbar的外层有足够宽高让其撑满,建议tabbar的外层容器使用绝对定位布局。

布局说明

使用方法

tabSlider 1.0.0 采用了类似ListView renderRow的渲染方法。对tab头、tab体的渲染都需要使用对应的渲染方法。具体来说,如果需要例子中效果,需要实现几步:

1、定义tabItem,既demo中的热门、黑板报等导航内容。eg:


/** @jsx createElement */
'use strict';
import { createElement, Component } from 'rax';
import View from 'nuke-view';
import Text from 'nuke-text';
import Image from 'nuke-image';
import styles from './demo.styles';

class TabItem extends Component {
  render() {
    const { itemData, index, currentIndex, isRenderCurrent } = this.props;
    if (itemData) {
      return (
        <View
          style={
            isRenderCurrent && index === currentIndex ? (
              [styles.tabItem, styles.tabItemCur]
            ) : (
              styles.tabItem
            )
          }
        >
          {itemData.name ? (
            <View style={styles.tabTitle}>
              <Text
                style={
                  isRenderCurrent && index === currentIndex ? (
                    [styles.tabText, styles.tabTextCur]
                  ) : (
                    styles.tabText
                  )
                }
              >
                {itemData.name}
              </Text>
            </View>
          ) : null}
        </View>
      );
    }
    return null;
  }
}

export default TabItem;

2、 tabItem的传入数据包括 itemData, index, currentIndex, isRenderCurrent。

其中itemData是开发者自己定义的导航list数据如下,根据渲染方法的不同。数据格式和内容均是可以自定义的:

tabList: [
    {
      name: '热门',
      sceneId: '1',
      tabType: '1'
    },
    ...
  ],

3、定义renderPage,渲染tab的contain部分,以下是一个典型的tabPage。


class TabPage extends Component {

  render() {
    const { index } = this.props;
    return (
      <ListView
        id={`list${index}`}
        ref={`list${index}`}
        renderRow={this.renderRow}
        dataSource={this.qdList}
      />
    );
  }

  renderRow = (itemData, i) => {
    const { index } = this.props;
    return <Item itemData={itemData} index={i} pageIndex={index} />;
  };
}

4、可选定义切换时的动画组件 renderLoading


class TabLoading extends Component {
  render() {
    return (
      <View style={styles.pageLoading} data-ignore="true">
        <Image
          style={styles.loadingImg}
          source={{
            uri: '//gw.alicdn.com/tfs/TB1x9J7PXXXXXcHXVXXXXXXXXXX-140-80.gif'
          }}
        />
      </View>
    );
  }
}

5、 其他API请参考上面的API文档和使用demo。

** PS:如果依旧无法实现,可使用脚手架打开场景场景市场,查看tabSlider的使用源代码。**