slider.stories.jsx 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. import React, { Component } from 'react';
  2. import Slider from '../index';
  3. import Input from '../../input/index';
  4. import { Modal, Button, Form, Row, Col } from '@douyinfe/semi-ui/';
  5. export default {
  6. title: 'Slider'
  7. }
  8. function formatter(value) {
  9. return `${value}自定义`;
  10. }
  11. let divStyle = {
  12. width: 800,
  13. marginLeft: 20,
  14. marginTop: 40,
  15. paddingBottom: 30,
  16. };
  17. export const HorizontalSlider = () => (
  18. <div>
  19. <div style={divStyle}>
  20. <div>default</div>
  21. <Slider
  22. showBoundary={true}
  23. onChange={value => {
  24. console.log('value改变了' + value);
  25. }}
  26. ></Slider>
  27. </div>
  28. <div style={divStyle}>
  29. <div>min, max</div>
  30. <Slider
  31. showBoundary={true}
  32. min={10}
  33. max={50}
  34. onChange={value => {
  35. console.log('value改变了' + value);
  36. }}
  37. ></Slider>
  38. </div>
  39. <div style={divStyle}>
  40. <div>range</div>
  41. <Slider
  42. defaultValue={[20, 60]}
  43. range
  44. // step={0.01}
  45. onChange={value => {
  46. console.log('value改变了啊啊啊啊啊啊' + value);
  47. }}
  48. onAfterChange={value => {
  49. console.log('value结束于' + value);
  50. }}
  51. ></Slider>
  52. </div>
  53. <div style={divStyle}>
  54. <div>组合输入框</div>
  55. <InputSlider />
  56. </div>
  57. <div style={divStyle}>
  58. <div>格式化tooltip</div>
  59. <Slider
  60. tipFormatter={formatter}
  61. onChange={value => {
  62. console.log('value改变了' + value);
  63. }}
  64. ></Slider>
  65. </div>
  66. <div style={divStyle}>
  67. <div>tooltip=null</div>
  68. <Slider
  69. tipFormatter={null}
  70. onChange={value => {
  71. console.log('value改变了' + value);
  72. }}
  73. ></Slider>
  74. </div>
  75. <div style={divStyle}>
  76. <div>tooltipVisible=true始终显示tooltip</div>
  77. <Slider
  78. tooltipVisible={true}
  79. onChange={value => {
  80. console.log('value改变了' + value);
  81. }}
  82. ></Slider>
  83. </div>
  84. <div style={divStyle}>
  85. <div>step=10</div>
  86. <Slider
  87. step={10}
  88. marks={{ 10: '10', 20: '20', 30: '30', 40: '40', 50: '50' }}
  89. defaultValue={[10, 100]}
  90. range={true}
  91. onChange={value => {
  92. console.log('value改变了' + value);
  93. }}
  94. ></Slider>
  95. </div>
  96. <div style={divStyle}>
  97. <div>step=0.1</div>
  98. <Slider
  99. step={0.1}
  100. marks={{ 0.1: '0.1', 0.2: '0.2', 0.3: '0.3', 0.4: '0.4', 0.5: '0.5' }}
  101. min={0}
  102. max={1}
  103. defaultValue={[0.1, 0.5]}
  104. range={true}
  105. onChange={value => {
  106. console.log('value改变了' + value);
  107. }}
  108. ></Slider>
  109. </div>
  110. <div style={divStyle}>
  111. <div>marks</div>
  112. <Slider
  113. marks={{ 20: '20°C', 40: '40°C' }}
  114. getAriaValueText={(value) => `${value}°C`}
  115. defaultValue={[0, 100]}
  116. range={true}
  117. onChange={value => {
  118. console.log('value改变了' + value);
  119. }}
  120. ></Slider>
  121. </div>
  122. <div style={divStyle}>
  123. <div>inclued</div>
  124. <Slider
  125. marks={{ 20: '20°C', 40: '40°C' }}
  126. getAriaValueText={(value) => `${value}°C`}
  127. included={false}
  128. defaultValue={[0, 100]}
  129. range={true}
  130. onChange={value => {
  131. console.log('value改变了' + value);
  132. }}
  133. ></Slider>
  134. </div>
  135. </div>
  136. );
  137. HorizontalSlider.story = {
  138. name: 'horizontal slider',
  139. };
  140. class InputSlider extends Component {
  141. state = {
  142. value: 10,
  143. };
  144. getSliderValue = value => {
  145. this.setState({ value: value / 1 });
  146. };
  147. render() {
  148. const { value } = this.state;
  149. return (
  150. <div style={{ display: 'flex', width: 800 }}>
  151. <div style={{ width: 500 }}>
  152. <Slider step={0.1} value={value} onChange={value => this.getSliderValue(value)}></Slider>
  153. </div>
  154. <Input onChange={v => this.getSliderValue(v)} style={{ flex: 1 }} value={value} />
  155. </div>
  156. );
  157. }
  158. }
  159. let divStyle1 = {
  160. height: 400,
  161. marginLeft: 20,
  162. marginTop: 40,
  163. paddingRight: 30,
  164. display: 'inline-block',
  165. };
  166. export const VerticalSlider = () => (
  167. <div>
  168. <div style={divStyle1}>
  169. <Slider vertical range defaultValue={[20, 60]} aria-label="slider test"></Slider>
  170. </div>
  171. </div>
  172. );
  173. VerticalSlider.story = {
  174. name: 'vertical slider',
  175. };
  176. export const VerticalSliderInScrollContainer = () => (
  177. <div style={{ height: '300px', overflow: 'scroll' }}>
  178. <div style={{ height: '600px', marginTop: '30px' }}>
  179. <div style={divStyle1}>
  180. <Slider vertical onChange={value => {}}></Slider>
  181. </div>
  182. <div style={divStyle1}>
  183. <Slider
  184. vertical
  185. range
  186. defaultValue={[20, 60]}
  187. onChange={value => {
  188. console.log('value改变了' + value);
  189. }}
  190. ></Slider>
  191. </div>
  192. <div style={divStyle1}>
  193. <Slider
  194. vertical
  195. range
  196. marks={{ 20: '20c', 40: '40c' }}
  197. step={10}
  198. defaultValue={[20, 60]}
  199. onChange={value => {
  200. console.log('value改变了' + value);
  201. }}
  202. ></Slider>
  203. </div>
  204. </div>
  205. </div>
  206. );
  207. VerticalSliderInScrollContainer.story = {
  208. name: '在滚动容器中的vertical slider',
  209. };
  210. export const SliderInScrollContainer = () => (
  211. <div style={{ width: '300px', overflow: 'scroll' }}>
  212. <div style={{ width: '500px', marginTop: '10px' }}>
  213. <div style={divStyle}>
  214. <Slider onChange={value => {}}></Slider>
  215. </div>
  216. <div style={divStyle}>
  217. <Slider
  218. range
  219. defaultValue={[20, 60]}
  220. onChange={value => {
  221. console.log('value改变了' + value);
  222. }}
  223. ></Slider>
  224. </div>
  225. <div style={divStyle}>
  226. <Slider
  227. range
  228. marks={{ 20: '20c', 40: '40c' }}
  229. step={10}
  230. defaultValue={[20, 60]}
  231. onChange={value => {
  232. console.log('value改变了' + value);
  233. }}
  234. ></Slider>
  235. </div>
  236. </div>
  237. </div>
  238. );
  239. SliderInScrollContainer.story = {
  240. name: '在滚动容器中的slider'
  241. }
  242. class ControlledSlider extends Component {
  243. state = {
  244. value: 30,
  245. rangeValue: [10, 30],
  246. };
  247. changeValue = () => {
  248. this.setState({ value: this.state.value + 10 });
  249. const [start, end] = this.state.rangeValue;
  250. this.setState({ rangeValue: [start - 10, end + 10]})
  251. };
  252. changeRangeValue = rangeValue => {
  253. this.setState({ rangeValue: rangeValue });
  254. };
  255. render() {
  256. const { value, rangeValue } = this.state;
  257. return (
  258. <div>
  259. <Button onClick={() => this.changeValue()}>点击改变value</Button>
  260. <div data-cy="horizontalNoChangeSlider" style={{ width: 800, marginLeft: 20, marginTop: 40 }}>
  261. <Slider
  262. value={30}
  263. onChange={value => {
  264. console.log('value改变了' + value);
  265. }}
  266. ></Slider>
  267. </div>
  268. <div data-cy="horizontalOnChangeSlider" style={{ width: 800, marginLeft: 20, marginTop: 40 }}>
  269. <Slider
  270. value={value}
  271. onChange={value => {
  272. console.log('value改变了' + value);
  273. this.setState({value: value});
  274. }}
  275. ></Slider>
  276. </div>
  277. <div data-cy="horizontalNoChangeRangeSlider" style={{ width: 800, marginLeft: 20, marginTop: 40 }}>
  278. <Slider
  279. value={rangeValue}
  280. onChange={rangeValue => {
  281. console.log('value改变了' + rangeValue);
  282. }}
  283. range
  284. ></Slider>
  285. </div>
  286. <div data-cy="horizontalNoChangeVerticalSlider" style={{ width: 800, marginLeft: 20, marginTop: 40 }}>
  287. <Slider
  288. value={40}
  289. vertical
  290. onChange={value => {
  291. console.log('value改变了' + value);
  292. }}
  293. style={{height: '300px'}}
  294. ></Slider>
  295. </div>
  296. </div>
  297. );
  298. }
  299. }
  300. export const ControlledSliderDemo = () => <ControlledSlider />;
  301. ControlledSliderDemo.story = {
  302. name: '受控slider'
  303. }
  304. class DisableSlider extends Component {
  305. state = {
  306. disabled: false,
  307. };
  308. changeValue = () => {
  309. this.setState({ disabled: !this.state.disabled });
  310. };
  311. render() {
  312. const { disabled } = this.state;
  313. return (
  314. <div>
  315. <Button onClick={() => this.changeValue()}>toggle disable slider</Button>
  316. <div style={{ width: 800, marginLeft: 20, marginTop: 40 }}>
  317. <Slider
  318. disabled={disabled}
  319. defaultValue={10}
  320. onChange={value => {
  321. console.log('value改变了' + value);
  322. }}
  323. ></Slider>
  324. </div>
  325. </div>
  326. );
  327. }
  328. }
  329. export const _DisableSlider = () => <DisableSlider />;
  330. _DisableSlider.story = {
  331. name: 'disable slider',
  332. };
  333. class TestDemo extends React.Component {
  334. constructor() {
  335. super();
  336. this.state = {
  337. visible: false,
  338. };
  339. this.showDialog = this.showDialog.bind(this);
  340. this.getFormApi = this.getFormApi.bind(this);
  341. this.handleOk = this.handleOk.bind(this);
  342. this.handleCancel = this.handleCancel.bind(this);
  343. }
  344. getFormApi(formApi) {
  345. this.formApi = formApi;
  346. }
  347. showDialog() {
  348. this.setState({
  349. visible: true,
  350. });
  351. }
  352. handleOk(e) {
  353. this.setState({
  354. visible: false,
  355. });
  356. }
  357. handleCancel(e) {
  358. this.setState({
  359. visible: false,
  360. });
  361. }
  362. render() {
  363. const { Slider, Switch } = Form;
  364. return (
  365. <>
  366. <Button onClick={this.showDialog}>打开弹窗</Button>
  367. <Modal
  368. title="基本对话框"
  369. visible={this.state.visible}
  370. onOk={this.handleOk}
  371. onCancel={this.handleCancel}
  372. >
  373. <Form style={{ padding: 10, width: '100%' }} onValueChange={v => console.log(v)}>
  374. <Row>
  375. <Col span={12}>
  376. <Slider field="range" range initValue={[10, 100]} style={{ width: '90%' }} />
  377. </Col>
  378. <Col span={12}>
  379. <Switch field="switch" />
  380. </Col>
  381. </Row>
  382. </Form>
  383. </Modal>
  384. </>
  385. );
  386. }
  387. }
  388. export const SliderInModal = () => <TestDemo />;
  389. SliderInModal.story = {
  390. name: 'slider in modal',
  391. };
  392. export const RangeMinSlider = () => (
  393. <Slider
  394. defaultValue={[20, 60]}
  395. range
  396. // step={0.01}
  397. min={10}
  398. // onChange={(value) => { console.log('value改变了啊啊啊啊啊啊' + value) }}
  399. // onAfterChange={(value) => { console.log('value结束于' + value) }}
  400. />
  401. );
  402. RangeMinSlider.story = {
  403. name: 'range min slider',
  404. };