react native 自定義導航欄隨滾動漸變

效果圖1 未滾動頁面

image.png

效果圖2 滾動頁面

image.png

使用方式

import React, { Component } from 'react'
import NavPage from './NavPage'
import { View, ScrollView, Image, Dimensions, Platform } from 'react-native'

let { width } = Dimensions.get('window')
let navHeight = (Platform.OS === 'ios' ? 20 : 0) + 45

export default class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      opacity: 0
    }
  }

  onScroll = (event) => {
    let offsetY = event.nativeEvent.contentOffset.y
    let opacity = offsetY / navHeight
    // if(opacity > 5 || opacity < -5) { // 這里可以優(yōu)化減少render赖阻, 1和0 滑快了會有些影響嘱朽, 這里你可以看著給值, 當然也可以不優(yōu)化
    //   return
    // }
    this.setState({
      opacity
    }) 
  }

  render() {
    return (
      <View style={{ alignItems: 'center' }}>
        <NavPage title={'詳情頁'} opacity={this.state.opacity} />
        <ScrollView
          showsVerticalScrollIndicator={false}
          ref='scroll'
          onScroll={this.onScroll}
          scrollEventThrottle={10}>
          <Image style={{ width: width, height: 300 }} source={{ uri: 'https://dimg07.c-ctrip.com/images/100e0t000000ihd4r494C_C_500_280.jpg' }} />
          <Image style={{ width: width, height: 300, marginTop: 20 }} source={{ uri: 'https://dimg04.c-ctrip.com/images/300e0q000000g5o8b658A_C_500_280.jpg' }} />
          <Image style={{ width: width, height: 300, marginTop: 20 }} source={{ uri: 'https://dimg04.c-ctrip.com/images/100l0s000000hg344225B_C_500_280.jpg' }} />
          <Image style={{ width: width, height: 300, marginTop: 20 }} source={{ uri: 'https://youimg1.c-ctrip.com/target/100f0d0000006xaav4A5E_C_220_110.jpg' }} />
        </ScrollView>
      </View>
    )
  }
}

自定義導航 NavPage.js

import React, { Component } from 'react';
import { View, Text, Image, StyleSheet, TouchableOpacity, Platform, Dimensions } from 'react-native';


/**
 * 自定義導航欄
 */
let height = (Platform.OS === 'ios' ? 20 : 0) + 45
export default class NavPage extends Component {

  render() {
    let { opacity, children, title } = this.props
    return (
      <View style={[styles.container, { backgroundColor: `rgba(16,94,174, ${opacity})` }]}>
        <TouchableOpacity style={styles.item} onPress={() => { alert('返回') }}>
          <Image style={styles.icon} source={require('./arrow.png')} />
        </TouchableOpacity>
        {

          <View style={{ alignItems: 'center', flex: 1 }}>
            {
              opacity < 0.4 ? null :
                (children || <Text style={{ color: '#FFF', fontSize: 17 }}>{title}</Text>)
            }
          </View>
        }
        <TouchableOpacity style={styles.item} onPress={() => { alert('更多') }}>
          <Image style={[styles.icon, { width: 25, height: 5 }]} source={require('./more.png')} />
        </TouchableOpacity>

      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    width: Dimensions.get('window').width,
    height: height,
    flexDirection: 'row',
    alignItems: 'center',
    justifyContent: 'space-between',
    paddingTop: Platform.OS === 'ios' ? 20 : 0,
    paddingHorizontal: 10,
    position: 'absolute',
    zIndex: 10
  },
  icon: {
    width: 21,
    height: 21,
  },
  item: {
    height: 30,
    width: 30,
    justifyContent: 'center',
    alignItems: 'center'
  }
})

NavPage.defaultProps = {
  title: 'title',
  opacity: 0
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胧弛,一起剝皮案震驚了整個濱河市盘寡,隨后出現(xiàn)的幾起案子楚殿,更是在濱河造成了極大的恐慌,老刑警劉巖宴抚,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勒魔,死亡現(xiàn)場離奇詭異甫煞,居然都是意外死亡,警方通過查閱死者的電腦和手機冠绢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門抚吠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弟胀,你說我怎么就攤上這事楷力。” “怎么了孵户?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵萧朝,是天一觀的道長。 經(jīng)常有香客問我夏哭,道長检柬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任竖配,我火速辦了婚禮何址,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘进胯。我一直安慰自己用爪,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布胁镐。 她就那樣靜靜地躺著偎血,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盯漂。 梳的紋絲不亂的頭發(fā)上颇玷,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音就缆,去河邊找鬼亚隙。 笑死,一個胖子當著我的面吹牛违崇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诊霹,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羞延,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脾还?” 一聲冷哼從身側(cè)響起伴箩,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鄙漏,沒想到半個月后嗤谚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棺蛛,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年巩步,在試婚紗的時候發(fā)現(xiàn)自己被綠了旁赊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡椅野,死狀恐怖终畅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竟闪,我是刑警寧澤离福,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站炼蛤,受9級特大地震影響妖爷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜理朋,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一絮识、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暗挑,春花似錦笋除、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烹看,卻和暖如春国拇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惯殊。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工酱吝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人土思。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓务热,卻偏偏與公主長得像,于是被迫代替她去往敵國和親己儒。 傳聞我的和親對象是個殘疾皇子崎岂,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容