UNPKG

weex-nuke

Version:

基于 Rax 、Weex 的高性能组件体系 ~~

162 lines (150 loc) 4.59 kB
/** @jsx createElement */ import { createElement, Component, findDOMNode, render } from 'rax'; import View from 'nuke-view'; import Text from 'nuke-text'; import Image from 'nuke-image'; import { isWeex, isWeb } from 'nuke-env'; import Transition from 'nuke-transition'; import Button from 'nuke-button'; import ScrollView from 'nuke-scroll-view'; const App = class NukeDemoIndex extends Component { constructor() { super(); this.state = { scale: true, translate: true, rotate: true, opacity: true, height: false, showOverlay: false, }; } transition=(styles, cb) => { const box = findDOMNode(this.refs.box); Transition(box, styles, { timingFunction: 'linear', delay: 0, duration: 500, }, function () { cb && cb.call(this); }); } scale=() => { const styles = this.state.scale ? { transform: 'scale(1.5, 1.5)' } : { transform: 'scale(1, 1)' }; this.transition(styles, () => { this.setState({ scale: !this.state.scale }); }); } translate=() => { const styles = this.state.translate ? { transform: 'translate(150,150)' } : { transform: 'translate(0, 0)' }; this.transition(styles, () => { this.setState({ translate: !this.state.translate }); }); } rotate=() => { const styles = this.state.rotate ? { transform: 'rotate(720deg)' } : { transform: 'rotate(0)' }; this.transition(styles, () => { this.setState({ rotate: !this.state.rotate }); }); } opacity=() => { const styles = this.state.opacity ? { opacity: '0.5' } : { opacity: '1' }; this.transition(styles, () => { this.setState({ opacity: !this.state.opacity }); }); } overlay=() => { const styles = this.state.showOverlay ? { opacity: '0', bottom: '-700rem' } : { opacity: '1', bottom: '0' }; const box = findDOMNode(this.refs.overlay); Transition(box, styles, { timingFunction: 'linear', delay: 0, duration: 500, }, () => { this.setState({ showOverlay: !this.state.showOverlay }); }); } height=() => { const styles = this.state.height ? { height: '40rem' } : { height: '500rem' }; const box = findDOMNode(this.refs.height); Transition(box, styles, { timingFunction: 'linear', delay: 0, duration: 500, needLayout: true, }, () => { this.setState({ height: !this.state.height }); }); } render() { return ( <ScrollView> <View style={styles.st}><Text style={styles.stText}>基础用法</Text></View> <View style={styles.wrapper}> <View ref="box" style={styles.box}> <Image style={styles.pic} source={{ uri: 'https://img.alicdn.com/tfs/TB1gaj.PXXXXXaHaXXXXXXXXXXX-200-200.png' }} /> </View> </View> <Button.Group style={styles.btnblock}> <Button type="primary" onPress={this.scale.bind(this)}>缩放</Button> <Button type="primary" onPress={this.translate.bind(this)}>变换</Button> <Button type="primary" onPress={this.rotate.bind(this)}>旋转</Button> <Button type="primary" onPress={this.opacity.bind(this)}>透明度</Button> </Button.Group> <Button style={{ marginTop: '20rem', marginBottom: '20rem' }} type="primary" onPress={this.height.bind(this)}>高度变化</Button> <View ref="height" style={[styles.height]}><Text>内容区</Text></View> </ScrollView> ); } }; const styles = { wrapper: { height: '600rem', borderWidth: 1, borderStyle: 'dashed', borderColor: '#cccccc', alignItems: 'center', margin: '20rem', justifyContent: 'center', }, box: { width: '200rem', height: '200rem', borderWidth: 1, borderStyle: 'solid', borderColor: '#3089dc', justifyContent: 'center', alignItems: 'center', borderRadius: '100rem', }, pic: { width: '160rem', height: '160rem', }, st: { marginTop: '30rem', marginBottom: '30rem', paddingTop: '10rem', paddingBottom: '10rem', paddingLeft: '20rem', backgroundColor: '#dddddd', }, stText: { fontSize: '36rem', }, btn: { marginRight: '20rem', }, btnblock: { marginTop: '20rem', }, height: { width: '750rem', height: 40, alignItems: 'center', justifyContent: 'center', // display:'none', backgroundColor: '#dddddd', }, }; render(<App />);