diff --git a/src/app.js b/src/app.js
index 5d4cdad7f..cda30cafb 100644
--- a/src/app.js
+++ b/src/app.js
@@ -29,7 +29,8 @@ class App extends Component {
'pages/navigation/timeline/index',
'pages/navigation/drawer/index',
'pages/navigation/tabs/index',
- 'pages/navigation/tab-bar/index'
+ 'pages/navigation/tab-bar/index',
+ 'pages/navigation/segmented-control/index'
// 'pages/layout/flex/index'
// 'pages/layout/grid/index',
// 'pages/layout/float-layout/index',
diff --git a/src/components/segmented-control/index.js b/src/components/segmented-control/index.js
new file mode 100644
index 000000000..157315cd7
--- /dev/null
+++ b/src/components/segmented-control/index.js
@@ -0,0 +1,64 @@
+import Taro from '@tarojs/taro'
+import { View } from '@tarojs/components'
+import PropTypes from 'prop-types'
+import './index.scss'
+
+/**
+ * @author:chenzeji
+ * @description segmented control 分段器组件
+ * @prop current {Number} 当前选中的tab index值,从0计数,default:0
+ * @prop color {String} 背景颜色与选中标签字体的颜色,default:#fff
+ * @prop selectedColor {String} 选中的标签背景色与边框颜色,default:#6190E8
+ * @prop tabList {Array} tab 列表 eg: [{ title: '标签页1' }, { title: '标签页2' }]
+ * @prop disabled {Boolean} 是否禁止点击 default:false
+ * @prop fontSize {String|Number} 字体大小,目前单位是px,等taro支持单位转化再修改 default:'14'
+ * @prop onClick {Function} 点击时触发事件,回调参数 {value: 1}
+ */
+class AtSegmentedControl extends Taro.Component {
+ handleClick (i, disable) {
+ if (disable) return
+ this.props.onClick({ value: i })
+ }
+
+ render () {
+ const { disabled, tabList, selectedColor, current, color, fontSize } = this.props
+ const rootStyle = `border-color: ${selectedColor};`
+ const itemStyle = `
+ color: ${selectedColor};
+ background-color:${color};
+ border-color: ${selectedColor};
+ font-size: ${fontSize}px;
+ `
+ const selectedItemStyle = `
+ color: ${color};
+ background-color:${selectedColor};
+ border-color: ${selectedColor};
+ font-size: ${fontSize}px;
+ `
+ return
+ {
+ tabList.map((item, i) =>
+ {item.title}
+ )
+ }
+
+ }
+}
+AtSegmentedControl.defaultProps = {
+ current: 0,
+ color: '#fff',
+ fontSize: '14',
+ disabled: false,
+ selectedColor: '#6190E8',
+ tabList: [],
+ onClick: () => { }
+}
+AtSegmentedControl.propTypes = {
+ current: PropTypes.number,
+ color: PropTypes.string,
+ fontSize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
+ disabled: PropTypes.bool,
+ tabList: PropTypes.array,
+ onClick: PropTypes.func
+}
+export default AtSegmentedControl
diff --git a/src/components/segmented-control/index.scss b/src/components/segmented-control/index.scss
new file mode 100644
index 000000000..037904184
--- /dev/null
+++ b/src/components/segmented-control/index.scss
@@ -0,0 +1,28 @@
+@import '../../style/mixins/index.scss';
+@import '../../style/theme/default.scss';
+
+.at-segmented-control {
+ display: flex;
+ text-align: center;
+ width: 100%;
+ border-radius: 15px;
+ border: 2px solid #6190E8;
+ box-sizing: border-box;
+ white-space: nowrap;
+ overflow: hidden;
+
+ &__item {
+ flex: 1;
+ font-size: 30px;
+ padding: 10px;
+ color: $color-text-base;
+
+ + .at-segmented-control__item {
+ border-left: 2px solid #6190E8;
+ }
+ }
+
+ &--disabled {
+ opacity: $opacity-disabled;
+ }
+}
diff --git a/src/pages/index/index.js b/src/pages/index/index.js
index a141ae9d3..5d0782f79 100644
--- a/src/pages/index/index.js
+++ b/src/pages/index/index.js
@@ -175,6 +175,10 @@ export default class Index extends Taro.Component {
{
title: '标签栏',
name: 'Tab-Bar'
+ },
+ {
+ title: '分段器',
+ name: 'Segmented-Control'
}
]
}
diff --git a/src/pages/navigation/segmented-control/index.js b/src/pages/navigation/segmented-control/index.js
new file mode 100644
index 000000000..9d8245579
--- /dev/null
+++ b/src/pages/navigation/segmented-control/index.js
@@ -0,0 +1,40 @@
+import Taro from '@tarojs/taro'
+import { View } from '@tarojs/components'
+import AtSegmentedControl from '../../../components/segmented-control/index'
+import './index.scss'
+
+export default class Index extends Taro.Component {
+ config = {
+ navigationBarTitleText: 'segmented-control 分段器示例'
+ }
+ constructor () {
+ super(...arguments)
+ this.state = {
+ current: 0,
+ }
+ }
+ handleClick (detail) {
+ this.setState({
+ current: detail.value
+ })
+ }
+ render () {
+ const { current } = this.state
+ return (
+
+
+
+
+
+
+ {current === 0 ? 标签1的内容 : null}
+ {current === 1 ? 标签2的内容 : null}
+ {current === 2 ? 标签3的内容 : null}
+
+
+
+
+
+ )
+ }
+}
diff --git a/src/pages/navigation/segmented-control/index.scss b/src/pages/navigation/segmented-control/index.scss
new file mode 100644
index 000000000..721ac58c0
--- /dev/null
+++ b/src/pages/navigation/segmented-control/index.scss
@@ -0,0 +1,17 @@
+.example__body {
+ background-color: #f8f8f8;
+ min-height: 100px;
+ padding: 30px 10px;
+
+ .item {
+ margin-bottom: 10px;
+ }
+
+ .tab-content {
+ font-size: 25px;
+ padding: 20px;
+ text-align: center;
+ border-top: 2px solid #f8f8f8;
+ background-color: #fff;
+ }
+}