日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

React-Native仿某电商商品详情页面

發布時間:2023/12/29 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 React-Native仿某电商商品详情页面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言: 一周又過去了,一直在趕需求,除了自己利用空余時間學習一下外壓根就沒時間去研究新東西,唉~程序猿就是這樣,活到老學到老!! 廢話不多說了,公司產品覺得某電商的商品詳情頁面很nice,問我們能不能實現(寶寶心里苦),于是研究了一波,下面把我研究的東西分享一下,小伙伴有啥好的實現方式還謝謝分享一下哦~拜謝!

先看一下最終實現的效果:
ios/android

簡單來說就是分為兩個部分(上下),兩個都是(scrollview、flatlist)等滑動組件,第一個scrollview滑動到底部的時候,繼續上拉顯示第二個scrollview,第二個scrollview下拉到頂部的時候,繼續下拉回到第一個scrollview并且第一個scrollview回到頂部.

下面說一下我的大體思路:

第一種方式:
利用rn手勢,然后監聽scrollview的滑動事件,我們都知道rn中的事件傳遞都是從父控件一層一層往下傳遞,所以父控件能夠攔截scrollview也就是子控件的能力,當scrollview滑動到底部或者頂部的時候攔截scrollview的事件,把事件給父控件,然后通過控制父控件的垂直偏移量首先分頁功能,說了那么多理論的東西小伙伴估計都累了,我們后面結合代碼一起來說一下.

第二種方式:
封裝一個native的組件實現上拉和下拉的操作,rn只需要做一些簡單的監聽就可以.

兩種方式對比來看,能用rn實現最好,因為rn存在的目的也就是為了實現跨平臺目的,都用native實現了還用rn干嘛!! 話雖然這樣說,但是rn還是給開發人員提供了自定義的方法,用第二種方式實現有點就是性能和體驗上要優于rn實現,我接下來會結合兩種方式來實現.

先說一下第一種方式

第一步(把頁面分為上下兩部分):

render() {return (<View style={[styles.container]}>{/*第一部分*/}<Animated.View style={[styles.container1,{marginTop:this._aniBack.interpolate({inputRange:[0,1],outputRange:[0,-SCREEN_H],})}]}{...this._panResponder.panHandlers}><Animated.View ref={(ref) => this._container1 = ref}style={{width: SCREEN_W, height: SCREEN_H,marginTop:this._aniBack1.interpolate({inputRange:[0,1],outputRange:[0,-100],})}}><ScrollView ref={(ref)=>this._scroll1=ref}bounces={false}scrollEventThrottle={10}onScroll={this._onScroll.bind(this)}overScrollMode={'never'}>{this._getContent()}</ScrollView></Animated.View><View style={{width:SCREEN_W,height:100,backgroundColor:'white',alignItems:'center',justifyContent:'center'}}><Text>上拉查看詳情</Text></View></Animated.View>{/*第二部分*/}<View style={styles.container2}{...this._panResponder2.panHandlers}><Animated.View ref={(ref) => this._container2 = ref}style={{width:SCREEN_W,height:100,backgroundColor:'white',alignItems:'center',justifyContent:'center',marginTop:this._aniBack2.interpolate({inputRange:[0,1],outputRange:[-100,0],})}}><Text>下拉回到頂部</Text></Animated.View><View style={{width: SCREEN_W, height: SCREEN_H,}}><ScrollView ref={(ref)=>this._scroll2=ref}bounces={false}scrollEventThrottle={10}onScroll={this._onScroll2.bind(this)}overScrollMode={'never'}>{this._getContent()}</ScrollView></View></View></View>);}

代碼我待會會貼出來,原理很簡單,我大體說一下我的實現思路,運行代碼你會發現,頁面是顯示了一個紅色頁面(也就是上部分).

讓我們把第一個頁面的marginTop調為-SCREEN_H(屏幕高度)的時候,我們會看到第二屏藍色頁面

所以我們只需要在第一個紅色頁面的scrollview滑動到底部的時候,然后攔截事件,手指抬起的時候,讓第一個頁面的marginTop從(0到-屏幕高度)的轉變,我們同時給個動畫實現.那么問題來了,我們該怎么監聽scrollview到達頂部或者底部呢?我們又該怎么攔截scrollview的事件呢?

監聽scrollview到達頂部或者底部:

到達頂部我們都知道,當scrollview的y軸偏移量=0的時候我們就認為scrollview到達頂部了,轉為代碼就是:

_onScroll2(event){this._reachEnd2=false;let y = event.nativeEvent.contentOffset.y;if(y<=0){//到達頂部了this._reachEnd2=true;}}

到達底部也就是當(子控件的高度=y軸滑動的距離+父控件的高度)的時候,轉為代碼為:

_onScroll(event){this._reachEnd1=false;let y = event.nativeEvent.contentOffset.y;let height = event.nativeEvent.layoutMeasurement.height;let contentHeight = event.nativeEvent.contentSize.height;if (contentHeight > height && (y + height >= contentHeight)) {//到達頂部了this._reachEnd1=true;}}

父控件攔截子控件的事件:
我們在onMoveShouldSetPanResponderCapture返回true,父控件就是攔截掉滑動事件,然后交給自己處理(onPanResponderMove),那么我們紅色頁面(也就是第一頁)的scrollview到達底部的時候,再往上拉的時候,我們攔截事件

_handleMoveShouldSetPanResponderCapture(event: Object, gestureState: Object,): boolean {console.log('_handleMoveShouldSetPanResponderCapture');console.log(gestureState.dy);//當滑動到底部并且繼續往上拉的時候return this._reachEnd1&&gestureState.dy<0;}

我們第二個頁面(也就是藍色頁面)當scrollview滑動到頂部并且繼續往下拉的時候,攔截事件:

_handleMoveShouldSetPanResponderCapture2(event: Object, gestureState: Object,): boolean {console.log(gestureState.dy);console.log('_handleMoveShouldSetPanResponderCapture2');//當滑動到頂部并且繼續往下拉的時候return this._reachEnd2&&gestureState.dy>=0;}

好啦~我們第一個頁面的父控件拿到滑動事件后,我們繼續往上拉,也就是把往上拉的距離賦給我們的“上拉查看詳情“組件了:
_handlePanResponderMove(event: Object, gestureState: Object): void {
//防止事件攔截不準,我們把scrollview的scrollEnabled:false設置為false
this._scroll1.setNativeProps({
scrollEnabled:false
})
let nowLeft =gestureState.dy*0.5;
//控制一個頁面的“上拉查看詳情“組件顯示
this._container1.setNativeProps({
marginTop:nowLeft
})
console.log(‘_handlePanResponderMove’,gestureState.dy);

<Animated.View ref={(ref) => this._container1 = ref}style={{width: SCREEN_W, height: SCREEN_H,marginTop:this._aniBack1.interpolate({inputRange:[0,1],outputRange:[0,-100],})}}><ScrollView ref={(ref)=>this._scroll1=ref}bounces={false}scrollEventThrottle={10}onScroll={this._onScroll.bind(this)}overScrollMode={'never'}>{this._getContent()}</ScrollView></Animated.View><View style={{width:SCREEN_W,height:100,backgroundColor:'white',alignItems:'center',justifyContent:'center'}}><Text>上拉查看詳情</Text></View>

代碼很簡單,我就不一一解釋了,小伙伴自己去運行看看哈,下面是第一種方式的所有實現代碼,直接運行就可以了:

/*** Sample React Native App* https://github.com/facebook/react-native* @flow*/import React, {Component} from 'react'; import {Platform,StyleSheet,Text,View,TouchableOpacity,Dimensions,ScrollView,PanResponder,Animated,StatusBar, } from 'react-native'; const SCREEN_W = Dimensions.get('window').width; const SCREEN_H = Dimensions.get('window').height-(Platform.OS==='android'?StatusBar.currentHeight:0); import SwipeRow from './SwipeRow';export default class App extends Component {// 構造constructor(props) {super(props);// 初始狀態// 初始狀態this._panResponder = PanResponder.create({onMoveShouldSetPanResponderCapture: this._handleMoveShouldSetPanResponderCapture.bind(this),onStartShouldSetResponderCapture:this._handleMoveShouldSetPanResponderCapture.bind(this),onPanResponderMove: this._handlePanResponderMove.bind(this),onPanResponderRelease: this._handlePanResponderEnd.bind(this),onPanResponderGrant:this._handlePanGrant.bind(this),onPanResponderTerminate:()=>{console.log('onPanResponderTerminate');this._aniBack1.setValue(0);Animated.spring(this._aniBack1,{toValue:1}).start(()=>{this._handlePanResponderEnd();});},onShouldBlockNativeResponder: (event, gestureState) => false,//表示是否用 Native 平臺的事件處理,默認是禁用的,全部使用 JS 中的事件處理,注意此函數目前只能在 Android 平臺上使用});this._panResponder2 = PanResponder.create({onMoveShouldSetPanResponderCapture: this._handleMoveShouldSetPanResponderCapture2.bind(this),onStartShouldSetResponderCapture:this._handleMoveShouldSetPanResponderCapture2.bind(this),onPanResponderMove: this._handlePanResponderMove2.bind(this),onPanResponderRelease: this._handlePanResponderEnd2.bind(this),onPanResponderGrant:this._handlePanGrant2.bind(this),onPanResponderTerminate:()=>{this._container2.setNativeProps({marginTop:0})this._aniBack2.setValue(0);Animated.spring(this._aniBack2,{toValue:1}).start(()=>{this._handlePanResponderEnd2();});console.log('onPanResponderTerminate2');},onShouldBlockNativeResponder: (event, gestureState) => false,//表示是否用 Native 平臺的事件處理,默認是禁用的,全部使用 JS 中的事件處理,注意此函數目前只能在 Android 平臺上使用});this._reachEnd1=false;this._reachEnd2=true;this._aniBack=new Animated.Value(0);this._aniBack1=new Animated.Value(0);this._aniBack2=new Animated.Value(0);}_handlePanGrant(event: Object, gestureState: Object,){this._scroll1.setNativeProps({scrollEnabled:false})}_handleMoveShouldSetPanResponderCapture(event: Object, gestureState: Object,): boolean {console.log('_handleMoveShouldSetPanResponderCapture');console.log(gestureState.dy);return this._reachEnd1&&gestureState.dy<0;}_handlePanResponderMove(event: Object, gestureState: Object): void {this._scroll1.setNativeProps({scrollEnabled:false})let nowLeft =gestureState.dy*0.5;this._container1.setNativeProps({marginTop:nowLeft})console.log('_handlePanResponderMove',gestureState.dy);}_handlePanResponderEnd(event: Object, gestureState: Object): void {this._aniBack.setValue(0);this._scroll1.setNativeProps({scrollEnabled: true})this._scroll1.scrollTo({y:0},true);Animated.timing(this._aniBack, {duration: 500,toValue: 1}).start();this._aniBack1.setValue(1);Animated.spring(this._aniBack1, {toValue: 0}).start();}_handleMoveShouldSetPanResponderCapture2(event: Object, gestureState: Object,): boolean {console.log(gestureState.dy);console.log('_handleMoveShouldSetPanResponderCapture2');return this._reachEnd2&&gestureState.dy>=0;}_handlePanResponderMove2(event: Object, gestureState: Object): void {console.log('_handlePanResponderMove2');let nowLeft =gestureState.dy*0.5;this._scroll2.setNativeProps({scrollEnabled:false})this._container2.setNativeProps({marginTop:-100+nowLeft})console.log('_handlePanResponderMove2',gestureState.dy);}_handlePanGrant2(event: Object, gestureState: Object,){this._scroll2.setNativeProps({scrollEnabled:false})}_handlePanResponderEnd2(event: Object, gestureState: Object): void {this._aniBack.setValue(1);this._scroll2.setNativeProps({scrollEnabled: true})Animated.timing(this._aniBack, {duration: 500,toValue: 0}).start();this._aniBack2.setValue(1);Animated.spring(this._aniBack2, {toValue: 0}).start();}render() {return (<Viewstyle={[styles.container]}>{/*第一部分*/}<Animated.Viewstyle={[styles.container1,{marginTop:this._aniBack.interpolate({inputRange:[0,1],outputRange:[0,-SCREEN_H],})}]}{...this._panResponder.panHandlers}><Animated.Viewref={(ref) => this._container1 = ref}style={{width: SCREEN_W, height: SCREEN_H,marginTop:this._aniBack1.interpolate({inputRange:[0,1],outputRange:[0,-100],})}}><ScrollViewref={(ref)=>this._scroll1=ref}bounces={false}scrollEventThrottle={10}onScroll={this._onScroll.bind(this)}overScrollMode={'never'}>{this._getContent()}</ScrollView></Animated.View><View style={{width:SCREEN_W,height:100,backgroundColor:'white',alignItems:'center',justifyContent:'center'}}><Text>上拉查看詳情</Text></View></Animated.View>{/*第二部分*/}<Viewstyle={styles.container2}{...this._panResponder2.panHandlers}><Animated.Viewref={(ref) => this._container2 = ref}style={{width:SCREEN_W,height:100,backgroundColor:'white',alignItems:'center',justifyContent:'center',marginTop:this._aniBack2.interpolate({inputRange:[0,1],outputRange:[-100,0],})}}><Text>下拉回到頂部</Text></Animated.View><Viewstyle={{width: SCREEN_W, height: SCREEN_H,}}><ScrollViewref={(ref)=>this._scroll2=ref}bounces={false}scrollEventThrottle={10}onScroll={this._onScroll2.bind(this)}overScrollMode={'never'}>{this._getContent()}</ScrollView></View></View></View>);}_onScroll(event){this._reachEnd1=false;let y = event.nativeEvent.contentOffset.y;let height = event.nativeEvent.layoutMeasurement.height;let contentHeight = event.nativeEvent.contentSize.height;if (contentHeight > height && (y + height >= contentHeight)) {this._reachEnd1=true;}}_onScroll2(event){this._reachEnd2=false;let y = event.nativeEvent.contentOffset.y;if(y<=0){this._reachEnd2=true;}}_getContent(){let contents=[];for (let i = 0; i < 50; i++) {contents.push(<Text style={{color:'#fff',marginTop:10}} key={'item'+i}>content-->{i}</Text>);}return contents;} }const styles = StyleSheet.create({container: {flex: 1,backgroundColor: '#F5FCFF',width: '100%',// transform:[{translateY:-SCREEN_H}]},container1:{width:SCREEN_W,height:SCREEN_H,backgroundColor:'red'},container2:{width:SCREEN_W,height:SCREEN_H,backgroundColor:'blue',overflow:'hidden'}, });

簡單說一下第二種方式(我之后會把項目的全部代碼貼出來):

第一步(你需要封裝一個上拉和下拉刷新的控件給rn,)為了方便我就直接去引用了一個第三方的下拉框架:
Android智能下拉刷新框架-SmartRefreshLayout

感謝這哥們的無私奉獻~~我是懷著膜拜的心態看完了這哥們代碼,大牛一枚,鑒定完畢~!! 哈哈~ 小伙伴也可以去看看哈,我就不解釋這框架了,直接拿過來用了.

最后rn用的時候很簡單:

/*** @author YASIN* @version [React-Native Ocj V01, 2018/3/28]* @date 17/2/23* @description App2*/ import React, {Component} from 'react'; import {Platform,StyleSheet,Text,View,TouchableOpacity,Dimensions,ScrollView,PanResponder,Animated,StatusBar, } from 'react-native';const SCREEN_W = Dimensions.get('window').width; const SCREEN_H = Dimensions.get('window').height - (Platform.OS === 'android' ? StatusBar.currentHeight : 0);import SmallLayout from './SmartRefreshLayout';export default class App2 extends Component {// 構造constructor(props) {super(props);// 初始狀態this.state = {loadMore1: false,loadMore1: false,};this.aniBack = new Animated.Value(0);}render() {return (<Animated.Viewstyle={[styles.container, {marginTop: this.aniBack.interpolate({inputRange: [0, 1],outputRange: [0, -SCREEN_H],})}]}>{/*第一部分*/}<SmallLayoutstyle={{width: '100%', height: SCREEN_H, backgroundColor: 'red'}}loadMore={this.state.loadMore1}refreshEnable={false}onLoadMore={() => {this._startAniNext();}}><ScrollView>{this._getContent()}</ScrollView></SmallLayout>{/*第二部分*/}<SmallLayoutkey={'small2'}style={{width: '100%', height: SCREEN_H, backgroundColor: 'blue'}}refreshing={this.state.loadMore2}loadMoreEnable={false}onRefresh={()=>{this._startAniBackTop();}}><ScrollView>{this._getContent()}</ScrollView></SmallLayout></Animated.View>);}_startAniBackTop() {this.aniBack.setValue(1);Animated.timing(this.aniBack, {duration: 1000,toValue: 0,}).start(() => {});}_startAniNext() {this.aniBack.setValue(0);Animated.timing(this.aniBack, {duration: 1000,toValue: 1,}).start(() => {});}_getContent() {let contents = [];for (let i = 0; i < 50; i++) {contents.push(<Text style={{color: '#fff', marginTop: 10}} key={'item' + i}>content-->{i}</Text>);}return contents;} } const styles = StyleSheet.create({container: {flex: 1,width: '100%',} });

是不是很簡單?對的,簡簡單單100行代碼就搞定了,然后效果咋樣?

事件銜接很平滑,體驗比rn好!當然,我只實現了android部分,小伙伴懂ios的也可以把ios的實現一下~~
我簡單說一下與native的橋接(原諒我只能以android為例子)

第一步(新建一個SmartRefreshLayoutManager繼承ViewGroupManager,然后提供rn調用的屬性跟方法還有回調):

/*** Copyright (c) 2015-present, Facebook, Inc.* All rights reserved.* <p>* This source code is licensed under the BSD-style license found in the* LICENSE file in the root directory of this source tree. An additional grant* of patent rights can be found in the PATENTS file in the same directory.*/package com.swipedemo;import android.support.annotation.NonNull;import com.facebook.react.bridge.ReactContext; import com.facebook.react.common.MapBuilder; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.ViewGroupManager; import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.EventDispatcher; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; import com.scwang.smartrefresh.layout.listener.OnRefreshListener;import java.util.Map;/*** ViewManager for {@link com.facebook.react.views.swiperefresh.ReactSwipeRefreshLayout} which allows the user to "pull to refresh" a* child view. Emits an {@code onRefresh} event when this happens.*/ @ReactModule(name = SmartRefreshLayoutManager.REACT_CLASS) public class SmartRefreshLayoutManager extends ViewGroupManager<SmartRefreshLayout> {protected static final String REACT_CLASS = "AndroidSmartRefreshLayout";@ReactProp(name = "refreshing")public void setRefreshing(SmartRefreshLayout view, boolean refreshing) {if (refreshing) {view.autoRefresh();} else {view.finishRefresh();}}@ReactProp(name = "loadMore")public void setLoadMore(SmartRefreshLayout view, boolean refreshing) {if (refreshing) {view.autoLoadMore();} else {view.finishLoadMore();}}@ReactProp(name = "loadMoreEnable")public void setLoadMoreEnable(SmartRefreshLayout view, boolean enable) {view.setEnableLoadMore(enable);}@ReactProp(name = "refreshEnable")public void setRefreshEnable(SmartRefreshLayout view, boolean enable) {view.setEnableRefresh(enable);}@Overrideprotected SmartRefreshLayout createViewInstance(ThemedReactContext reactContext) {final SmartRefreshLayout smartRefreshLayout = new SmartRefreshLayout(reactContext);smartRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {@Overridepublic void onLoadMore(@NonNull final RefreshLayout refreshLayout) {dispatchEvent(smartRefreshLayout,new LoadMoreEvent(smartRefreshLayout.getId()));}});smartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {@Overridepublic void onRefresh(@NonNull RefreshLayout refreshLayout) {dispatchEvent(smartRefreshLayout,new RefreshEvent(smartRefreshLayout.getId()));}});//觸發自動刷新smartRefreshLayout.setRefreshHeader(new CustHeader(reactContext)); // smartRefreshLayout.setEnableOverScrollBounce(true);smartRefreshLayout.setEnableOverScrollDrag(false);smartRefreshLayout.setEnableAutoLoadMore(false);smartRefreshLayout.setRefreshFooter(new CustFooter(reactContext));return smartRefreshLayout;}@Overridepublic String getName() {return REACT_CLASS;}@Overridepublic Map<String, Object> getExportedCustomDirectEventTypeConstants() {return MapBuilder.<String, Object>builder().put("topRefresh", MapBuilder.of("registrationName", "onRefresh")).put("bottomRefresh", MapBuilder.of("registrationName", "onLoadMore")).build();}protected static void dispatchEvent(SmartRefreshLayout refreshLayout, Event event) {ReactContext reactContext = (ReactContext) refreshLayout.getContext();EventDispatcher eventDispatcher =reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher();eventDispatcher.dispatchEvent(event);} }

我只能說還是需要一點android基礎才能看懂這代碼的,哈哈~ 原諒我又裝了一個b, 會android的我就不用解釋這是啥了~~不懂的可以查看原生給rn封裝的自帶的下拉刷新組件:

哈哈~ 我也是仿照自帶的AndroidSwipeRefreshLayout組件封裝的,所以android的童鞋沒事研究一下源碼還是很有必要的.

好啦~ 逼裝完了,我們繼續哈,

然后新建一個叫SmartRefreshLayoutPackage類繼承ReactPackage把SmartRefreshLayoutManager添加進去:

package com.swipedemo;import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager;import java.util.Arrays; import java.util.Collections; import java.util.List;/*** Created by yinqingyang on 2018/3/28.*/public class SmartRefreshLayoutPackage implements ReactPackage {@Overridepublic List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {return Collections.emptyList();}@Overridepublic List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {return Arrays.<ViewManager>asList(new SmartRefreshLayoutManager());} }

最后將我們的SmartRefreshLayoutPackage添加進rn,我們來到我們的MainApplication:

public class MainApplication extends Application implements ReactApplication {static {SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {@NonNull@Overridepublic RefreshHeader createRefreshHeader(@NonNull Context context, @NonNull RefreshLayout layout) {layout.setPrimaryColorsId(R.color.colorPrimaryDark, android.R.color.white);//全局設置主題顏色return new ClassicsHeader(context).setTimeFormat(new DynamicTimeFormat("更新于 %s")).setArrowResource(R.mipmap.ic_launcher);}});SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {@NonNull@Overridepublic RefreshFooter createRefreshFooter(@NonNull Context context, @NonNull RefreshLayout layout) {return new ClassicsFooter(context);}});}private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {@Overridepublic boolean getUseDeveloperSupport() {return BuildConfig.DEBUG;}@Overrideprotected List<ReactPackage> getPackages() {return Arrays.<ReactPackage>asList(new MainReactPackage(),//添加我們的自定義packagenew SmartRefreshLayoutPackage());}@Overrideprotected String getJSMainModuleName() {return "index";}};

好啦!我們已經搞定原生部分了,那么我們的rn怎么才能拿到我們原生提供的view呢?

回到rn

第一步:我們創建一個SmartRefreshLayout.android.js文件,提供跟native 一樣的屬性:

export default class SmartRefreshLayout extends Component {static propTypes = {...ViewPropTypes,refreshing: PropTypes.bool,loadMore: PropTypes.bool,onLoadMore: PropTypes.func,onRefresh: PropTypes.func,loadMoreEnable: PropTypes.bool,refreshEnable: PropTypes.bool,};static defaultProps = {refreshing: false,loadMore: false,refreshEnable: true,loadMoreEnable: true,};

記住!! native有的屬性,我們定義的view一定要有.

然后通過rn自帶的requireNativeComponent方法把native的view橋接過來:

const AndroidSmartRefreshLayout = requireNativeComponent('AndroidSmartRefreshLayout', SmartRefreshLayout);

最后渲染出來:

render() {const {children, style, loadMore, refreshing, refreshEnable, loadMoreEnable} = this.props;return (<AndroidSmartRefreshLayoutref={ref => {this._nativeRef = ref;}}style={[style]}onLoadMore={this._onLoadMore}onRefresh={this._onRefresh}loadMore={loadMore}refreshEnable={refreshEnable}loadMoreEnable={loadMoreEnable}refreshing={refreshing}>{React.Children.toArray(children)}</AndroidSmartRefreshLayout>);}

全部代碼:

/*** @author YASIN* @version [React-Native Ocj V01, 2018/3/28]* @date 17/2/23* @description SmartRefreshLayout.android*/ import React, {Component} from 'react'; import {Platform,StyleSheet,Text,View, } from 'react-native';const PropTypes = require('prop-types'); const ViewPropTypes = require('ViewPropTypes'); const requireNativeComponent = require('requireNativeComponent'); export default class SmartRefreshLayout extends Component {static propTypes = {...ViewPropTypes,refreshing: PropTypes.bool,loadMore: PropTypes.bool,onLoadMore: PropTypes.func,onRefresh: PropTypes.func,loadMoreEnable: PropTypes.bool,refreshEnable: PropTypes.bool,};static defaultProps = {refreshing: false,loadMore: false,refreshEnable: true,loadMoreEnable: true,};// 構造constructor(props) {super(props);this._lastNativeLoadMore = false;this._lastNativeRefresh = false;}render() {const {children, style, loadMore, refreshing, refreshEnable, loadMoreEnable} = this.props;return (<AndroidSmartRefreshLayoutref={ref => {this._nativeRef = ref;}}style={[style]}onLoadMore={this._onLoadMore}onRefresh={this._onRefresh}loadMore={loadMore}refreshEnable={refreshEnable}loadMoreEnable={loadMoreEnable}refreshing={refreshing}>{React.Children.toArray(children)}</AndroidSmartRefreshLayout>);}componentDidMount() {this._lastNativeLoadMore = this.props.refreshing;};componentDidUpdate(prevProps: { loadMore: boolean }) {// RefreshControl is a controlled component so if the native refreshing// value doesn't match the current js refreshing prop update it to// the js value.if (this.props.loadMore !== prevProps.loadMore) {this._lastNativeLoadMore = this.props.loadMore;} else if (this.props.loadMore !== this._lastNativeLoadMore) {this._nativeRef.setNativeProps({loadMore: this.props.loadMore});this._lastNativeLoadMore = this.props.loadMore;}if (this.props.refreshing !== prevProps.refreshing) {this._lastNativeRefresh = this.props.refreshing;} else if (this.props.refreshing !== this._lastNativeRefresh) {this._nativeRef.setNativeProps({refreshing: this.props.refreshing});this._lastNativeRefresh = this.props.refreshing;}}_onLoadMore = (event) => {this._lastNativeLoadMore = true;this.props.onLoadMore && this.props.onLoadMore();// The native component will start refreshing so force an update to// make sure it stays in sync with the js component.this.forceUpdate();}_onRefresh=(event)=>{this._lastNativeRefresh = true;this.props.onRefresh && this.props.onRefresh();// The native component will start refreshing so force an update to// make sure it stays in sync with the js component.this.forceUpdate();} } const AndroidSmartRefreshLayout = requireNativeComponent('AndroidSmartRefreshLayout', SmartRefreshLayout);

好啦! 我們按照我們第一種實現方式的部分代碼實現一下:

/*** @author YASIN* @version [React-Native Ocj V01, 2018/3/28]* @date 17/2/23* @description App2*/ import React, {Component} from 'react'; import {Platform,StyleSheet,Text,View,TouchableOpacity,Dimensions,ScrollView,PanResponder,Animated,StatusBar, } from 'react-native';const SCREEN_W = Dimensions.get('window').width; const SCREEN_H = Dimensions.get('window').height - (Platform.OS === 'android' ? StatusBar.currentHeight : 0);import SmallLayout from './SmartRefreshLayout';export default class App2 extends Component {// 構造constructor(props) {super(props);// 初始狀態this.state = {loadMore1: false,loadMore1: false,};this.aniBack = new Animated.Value(0);}render() {return (<Animated.Viewstyle={[styles.container, {marginTop: this.aniBack.interpolate({inputRange: [0, 1],outputRange: [0, -SCREEN_H],})}]}>{/*第一部分*/}<SmallLayoutstyle={{width: '100%', height: SCREEN_H, backgroundColor: 'red'}}loadMore={this.state.loadMore1}refreshEnable={false}onLoadMore={() => {this._startAniNext();}}><ScrollView>{this._getContent()}</ScrollView></SmallLayout>{/*第二部分*/}<SmallLayoutkey={'small2'}style={{width: '100%', height: SCREEN_H, backgroundColor: 'blue'}}refreshing={this.state.loadMore2}loadMoreEnable={false}onRefresh={()=>{this._startAniBackTop();}}><ScrollView>{this._getContent()}</ScrollView></SmallLayout></Animated.View>);}_startAniBackTop() {this.aniBack.setValue(1);Animated.timing(this.aniBack, {duration: 1000,toValue: 0,}).start(() => {});}_startAniNext() {this.aniBack.setValue(0);Animated.timing(this.aniBack, {duration: 1000,toValue: 1,}).start(() => {});}_getContent() {let contents = [];for (let i = 0; i < 50; i++) {contents.push(<Text style={{color: '#fff', marginTop: 10}} key={'item' + i}>content-->{i}</Text>);}return contents;} } const styles = StyleSheet.create({container: {flex: 1,width: '100%',} });

最后運行代碼就可以看到我們之前截圖的效果了.

歡迎交流,歡迎入群~~

項目github地址:
https://github.com/913453448/SwipeDemo

總結

以上是生活随笔為你收集整理的React-Native仿某电商商品详情页面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

成年人电影毛片 | 国产精品精品久久久久久 | 天天干 夜夜操 | 在线中文视频 | 麻豆传媒在线视频 | 国产在线1区 | 中文在线免费一区三区 | av大全在线免费观看 | 美女网站在线播放 | 在线观看国产一区二区 | 婷婷激情在线 | 亚洲国产午夜精品 | 亚洲资源在线网 | 综合色亚洲 | 2019精品手机国产品在线 | 国产一区二区三区免费观看视频 | 99色在线观看视频 | 在线观看成人 | 国产青青青 | 丁香花在线观看视频在线 | 人人爽人人爽人人片 | 91人人插 | 免费视频你懂的 | 日韩精品免费在线观看 | 亚洲激情国产精品 | 99久久国产免费免费 | 久久国产精品小视频 | 色99久久 | 久久久www成人免费毛片麻豆 | 国产亚洲精品久久久久久大师 | 天天曰天天射 | 国产精品久久久久久久久久直播 | 香蕉97视频观看在线观看 | 成人国产精品电影 | 久久在线观看 | 色中射 | 国产成年免费视频 | 日本特黄一级片 | 久久久高清免费视频 | 国内精品久久影院 | 91视频高清免费 | 亚洲欧美日韩精品久久久 | 最近最新中文字幕 | 国产精品夜夜夜一区二区三区尤 | 久久久91精品国产 | 国产一区免费 | 天天爱天天射天天干天天 | 在线观看的av网站 | 国产精美视频 | 国产精品正在播放 | 亚洲国产一二三 | 色婷婷一 | 麻豆久久| 99国产精品免费网站 | 成人h视频在线 | 激情五月婷婷丁香 | 国产在线理论片 | 欧美在线91 | 国产综合福利在线 | 蜜臀久久99精品久久久久久网站 | 亚洲国产中文在线观看 | 国产精品免费人成网站 | 九九精品久久久 | 国产亚洲视频在线免费观看 | 97成人在线免费视频 | 超薄丝袜一二三区 | 五月天婷婷丁香花 | 国产成人亚洲在线观看 | 国产又粗又猛又黄又爽的视频 | 精品国产一区二区三区在线观看 | 国产午夜精品一区 | 亚洲精品国产自产拍在线观看 | 午夜av免费观看 | 丝袜美腿在线 | 国产高清网站 | 日韩一级精品 | 99中文在线 | 亚洲国产精品电影在线观看 | 青青河边草观看完整版高清 | 成人午夜在线观看 | 久久99影院 | 久久99婷婷 | 免费av福利| 亚洲 欧洲 国产 日本 综合 | 日韩精品一区二区三区在线视频 | 欧美激情xxxx| 天天色天天 | 欧美极品在线播放 | 国产流白浆高潮在线观看 | 免费在线观看a v | 国产福利一区二区三区视频 | 国产护士hd高朝护士1 | 天天爱天天插 | 成人精品国产 | 国产精品初高中精品久久 | 91久久国产综合精品女同国语 | 久久新视频 | av亚洲产国偷v产偷v自拍小说 | av成人免费观看 | 美女视频黄在线观看 | 亚洲视频网站在线观看 | 亚洲精品乱码久久久久 | 成年人在线免费看视频 | 中文字幕国语官网在线视频 | 黄色在线观看网站 | 亚洲婷婷丁香 | 日韩一级片网址 | 一区二区日韩av | 免费看国产曰批40分钟 | 日韩av成人在线观看 | 亚洲综合丁香 | 中文字幕在线影视资源 | 人人澡人人模 | 91超国产| 8x成人免费视频 | 久久精品成人欧美大片古装 | 欧美日韩精品区 | 91av在线免费 | 91免费网站在线观看 | 偷拍区另类综合在线 | av性网站| 国产精品日韩 | 久久久久久久看片 | 去看片 | 国精产品999国精产品视频 | 国产麻豆视频网站 | 久久国产a | 中文字幕人成不卡一区 | 欧美看片| 91精品国产综合久久福利不卡 | 亚洲国产人午在线一二区 | 国产欧美最新羞羞视频在线观看 | 黄色三级免费片 | 96视频在线 | www.夜色.com | 久久国产麻豆 | 欧美一级在线 | 中文字幕一区二区三区在线观看 | 中文字幕av日韩 | 激情五月在线观看 | 极品久久久| 国产福利91精品一区 | 亚洲视频电影在线 | 五月天婷婷在线视频 | 日韩黄色免费 | 一级黄色片在线播放 | 久久视频这里有精品 | 欧美乱码精品一区二区 | 91网站观看| 久草视频在线看 | 在线观看日韩专区 | 国产日韩高清在线 | 亚洲精品视频在线观看免费 | 日本精品在线看 | www操操操| 人人爽人人搞 | 麻豆视频免费在线观看 | 国产福利一区二区三区视频 | 国产一区二区日本 | 精品一区 在线 | 亚洲精品久久视频 | 婷婷丁香激情 | 亚洲成熟女人毛片在线 | 午夜在线免费视频 | 91丨九色丨国产在线 | 日韩综合一区二区三区 | 日韩字幕在线观看 | 九九日韩 | 97超碰站| 亚洲视频一级 | av福利网址导航 | 国产亚洲综合精品 | 久久久久女人精品毛片九一 | 三级黄色在线观看 | 日韩中文字幕第一页 | 国产999精品视频 | 日日干天天干 | 日韩在线高清 | 碰超在线观看 | 五月天欧美精品 | 日狠狠 | 亚洲五月婷婷 | 九九九热 | 91丨九色丨国产丨porny精品 | 综合色综合色 | 天天操夜夜操夜夜操 | 日韩av中文字幕在线免费观看 | 91精品秘密在线观看 | 久久视影 | 人人玩人人爽 | 911久久香蕉国产线看观看 | 综合亚洲视频 | 日韩欧美精品在线视频 | 成人在线播放av | 自拍超碰在线 | 久久国内免费视频 | 精品福利片 | 亚在线播放中文视频 | 九九99视频 | 香蕉一区| 国产午夜精品免费一区二区三区视频 | 草久在线 | 国产h片在线观看 | 成人全视频免费观看在线看 | 五月婷婷婷婷婷 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久久国产精品久久精品国产演员表 | 亚洲va韩国va欧美va精四季 | 久草在线综合网 | 九九九在线 | 成人网444ppp | 三级黄色网络 | 国产精品九九九九九九 | 91视频中文字幕 | 欧美一级艳片视频免费观看 | 97国产超碰在线 | av在线播放观看 | 精品在线一区二区三区 | www色婷婷com| 国产一级片视频 | 美女视频黄频大全免费 | 欧美 亚洲 另类 激情 另类 | 九九免费在线观看 | 国产成人久久精品亚洲 | 日韩综合一区二区三区 | 91av视频在线免费观看 | 最近免费中文字幕大全高清10 | 97自拍超碰 | 黄色一二级片 | www在线观看国产 | 国产精品久久久久久久久久三级 | 91视视频在线直接观看在线看网页在线看 | 久久国产网站 | 日韩久久一区 | 色综合天天综合在线视频 | 韩国精品在线观看 | 亚洲精色 | 日韩成人免费观看 | 欧美成人亚洲成人 | 91传媒在线 | 天天操天天干天天操天天干 | 探花视频免费观看高清视频 | 日韩精品久久久久久 | 五月天六月婷婷 | 嫩草av在线| 91经典在线| 日韩欧美xxxx| 亚洲国产精品久久 | 天天射天天干天天爽 | 丁香五月亚洲综合在线 | 国产又粗又猛又黄又爽的视频 | 国模一区二区三区四区 | 欧美一区二区三区特黄 | 成人免费视频免费观看 | 2023av在线 | 国产免费国产 | 久久久久久免费毛片精品 | 亚洲日本成人 | 国产精品99久久久久的智能播放 | 国产91免费观看 | 成人午夜剧场在线观看 | 国产日韩精品一区二区在线观看播放 | 亚洲精品在线播放视频 | 很黄很色很污的网站 | 欧美精品v国产精品v日韩精品 | 亚洲视频在线免费观看 | 国产亚洲精品成人 | 免费看国产曰批40分钟 | 中文字幕激情 | 在线观看免费视频 | 日韩av快播电影网 | 久久超级碰视频 | 婷婷日日 | 亚洲国产精品小视频 | 波多野结依在线观看 | 精品一区精品二区高清 | 日日夜夜综合网 | 久草在在线 | 日韩午夜电影 | 99精品视频在线观看 | 国产精品久久久亚洲 | 久草在线视频首页 | 久久成人午夜视频 | 日韩成人黄色av | 成人久久精品视频 | 亚洲美女久久 | 97日日碰人人模人人澡分享吧 | 五月激情丁香婷婷 | 日韩欧美一区二区三区免费观看 | 日韩在线影视 | 在线观看黄av | 久久久久久免费毛片精品 | 玖玖在线精品 | 久久96 | 99久久综合狠狠综合久久 | 日韩成人精品一区二区三区 | 久久国产热视频 | 天天综合色天天综合 | 成人av教育 | 精品亚洲午夜久久久久91 | 欧美精品亚州精品 | 超碰大片| 中文字幕123区 | 99久久精品一区二区成人 | av视屏在线| 999ZYZ玖玖资源站永久 | 狠狠躁夜夜a产精品视频 | av丝袜制服| 免费看v片网站 | 色视频在线观看免费 | 久草视频在线资源站 | 青草草在线 | 欧美日韩高清一区二区 国产亚洲免费看 | 日韩va亚洲va欧美va久久 | 国产精品久久久久久久久软件 | 久久免费视频一区 | 在线免费视 | 人人澡人人爽欧一区 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 久久艹中文字幕 | 日韩最新在线视频 | 中文视频一区二区 | av一区在线 | 久久综合五月 | 亚洲影院国产 | 欧美精品久久久久久久久免 | 涩涩网站在线播放 | 91视频88av | 欧美va日韩va | 五月色综合 | 在线午夜 | 国产在线观看不卡 | 99中文字幕 | 91色综合| 天天干.com | 99热99热| 一区二区三区日韩在线 | 成人一级| 久久久久久久久影视 | 18久久久久 | 日韩a在线 | 91九色国产视频 | 国产破处精品 | 亚洲黄色免费网站 | 久久一区二区三区超碰国产精品 | 天天操夜夜想 | 日韩高清一区二区 | 日本爱爱片| 日本久久久久久科技有限公司 | 亚洲精品视频免费在线 | 美女福利视频一区二区 | 日韩综合第一页 | 欧美日韩国产网站 | 久久精品国产99国产 | 91自拍视频在线观看 | 六月天综合网 | 久久久久久蜜av免费网站 | 国产视频日韩 | 天天看天天干天天操 | 天天爱天天草 | 1024在线看片 | 久久新 | 成人午夜精品 | 9999精品免费视频 | 一级黄色片在线免费看 | 国产91区 | 五月色丁香 | 日日操夜夜操狠狠操 | 手机成人免费视频 | 9色在线视频| 丁香电影小说免费视频观看 | 久久精品中文字幕免费mv | 国产欧美久久久精品影院 | 最近免费观看的电影完整版 | 99国产视频 | 国产精品理论片在线播放 | 欧美精品中文在线免费观看 | 最新日本中文字幕 | 成人av在线网址 | 国产精品 国内视频 | 国产精品国产三级国产不产一地 | 天天爽综合网 | 欧美精品黑人性xxxx | 91看片在线播放 | av电影不卡在线 | 久久精品黄 | 在线导航福利 | 国产一区二区三区高清播放 | 国产精品观看视频 | 插插插色综合 | 久草在线在线 | 九九爱免费视频在线观看 | 人人干人人做 | 96看片| 久久这里有 | av一级久久 | 久久呀| av黄色一级片 | 久久亚洲国产精品 | 婷婷狠狠操 | 美女视频久久 | 国产精品电影在线 | 有码中文在线 | 欧美日韩xxxxx | 91视频在线播放视频 | 亚洲精品高清视频 | 美女久久久久 | 亚洲精品ww | 天堂av一区二区 | 99久久夜色精品国产亚洲 | 激情欧美日韩一区二区 | 91九色蝌蚪视频网站 | 综合激情网 | 久久久久久久久久久久影院 | 性色av一区二区三区在线观看 | 免费看片网页 | 天天操天天爱天天爽 | 91一区二区三区在线观看 | 99999精品视频| 丁香电影小说免费视频观看 | 九九在线免费视频 | 久久韩国免费视频 | 美女久久99 | 人人干天天干 | bbbbb女女女女女bbbbb国产 | 成人av免费在线观看 | 久草久| 亚洲成人av影片 | av在线官网 | 日本护士三级少妇三级999 | 一级电影免费在线观看 | av大全在线看 | 九九久久婷婷 | 国产精品v a免费视频 | 91精品国产自产老师啪 | 国产不卡一 | 欧美91精品国产自产 | 一级一级一片免费 | 欧美亚洲国产日韩 | 人人爽久久涩噜噜噜网站 | 亚洲2019精品 | 国产高清av在线播放 | 97香蕉久久超级碰碰高清版 | 成人va天堂 | 欧美一区日韩精品 | 操操操综合| 91av综合 | 爱爱av网 | 91精品视频免费看 | 在线视频 成人 | 手机在线看a | 中文字幕av在线不卡 | 91网站免费观看 | 免费看一级黄色 | 亚洲天天做 | 91在线国内视频 | 国产精品 日韩 | 成人9ⅰ免费影视网站 | 99草视频 | 国产亚洲精品av | 国产精品密入口果冻 | 国产黄色精品在线观看 | 天天操夜夜爱 | 精品久久九九 | 国产精品女视频 | 蜜桃视频日韩 | 亚洲国产精品电影 | 国产在线精品二区 | 中文字幕乱码日本亚洲一区二区 | 久久超级碰 | 久草视频首页 | 国产精品一区二区在线免费观看 | 中文字幕国产在线 | 国产成人在线一区 | 在线播放精品一区二区三区 | 日韩av在线看| 国产精品色 | 人人爽人人爽人人片av免 | 久久久久激情视频 | 美女在线免费观看视频 | 一区二区中文字幕在线播放 | 手机av观看| 国产精品毛片 | 成人精品久久久 | 激情综合一区 | 99爱在线| 亚洲伊人婷婷 | 九色91在线视频 | 涩涩资源网 | 少妇18xxxx性xxxx片 | 免费高清在线视频一区· | 日韩中文在线播放 | 久久夜视频 | 亚洲午夜小视频 | 国产精品免费观看在线 | 国产日韩在线视频 | 这里只有精彩视频 | 精品免费视频. | 人人爽人人乐 | 色婷婷色 | 国产999精品久久久久久 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产精品99久久免费黑人 | 亚洲乱码久久久 | 国产又粗又猛又爽 | 天天草天天操 | 日日日日| 中文字幕在线看视频国产 | 日本中文在线 | 91视频免费观看 | 久草网免费| 看全黄大色黄大片 | 日本精品久久久久影院 | 日韩视频一区二区三区在线播放免费观看 | 国产视频一区二区在线播放 | 91天天操| 四虎永久精品在线 | 欧美 亚洲 另类 激情 另类 | 九九激情视频 | 色在线网站 | av久久在线 | 色狠狠狠 | 91精品啪| www欧美日韩| 亚洲视频99| 久久国产精品久久精品国产演员表 | 开心色插 | 天堂va在线高清一区 | 久久精品国产亚洲精品2020 | 有码视频在线观看 | www视频在线免费观看 | 91在线视频观看免费 | 亚洲精品国产综合99久久夜夜嗨 | 天天色天天操天天爽 | 亚州成人av在线 | 91精品1区 | 色婷婷导航| 欧美成人在线免费观看 | 久久国产精品99久久久久久老狼 | 久久久免费高清视频 | 成人黄色大片 | 在线观看一区二区精品 | 九九久久国产 | 日韩理论在线观看 | 爱爱av网| 在线看不卡av | 久久精品99视频 | 国产在线久久久 | www在线观看视频 | 欧美韩国日本在线观看 | 操夜夜操 | 中文欧美字幕免费 | 99人成在线观看视频 | 93久久精品日日躁夜夜躁欧美 | 在线电影av | 狠狠狠色丁香婷婷综合久久五月 | 日韩在线免费观看视频 | 欧美一区二区三区免费看 | 丁香视频 | 在线导航av| 亚洲高清久久久 | 天天色天天综合网 | 亚洲免费成人av电影 | 久久在线视频在线 | 久久香蕉国产精品麻豆粉嫩av | 亚洲情影院 | 国产99久久久国产精品免费看 | 中文字幕在线看视频国产 | 国产精品高清在线 | 中文字幕第一页在线播放 | 91九色porny在线 | 国产中文字幕视频在线观看 | 亚洲区色 | 久久久免费毛片 | 极品美女被弄高潮视频网站 | 久久久www成人免费精品 | 久久人人爽 | www.色婷婷.com| 日韩在线网址 | 五月天婷婷丁香花 | 综合网伊人 | 激情 一区二区 | 久久av免费电影 | 超碰在线人人 | 色网免费观看 | 精品高清美女精品国产区 | 男女视频91 | 久久涩视频 | 992tv在线观看网站 | 成人黄色影片在线 | 天天射天天拍 | 日日精品 | 国产精品电影在线 | 人人草在线视频 | 国产高清免费观看 | 日韩精品一卡 | 激情久久小说 | 久久99在线观看 | 免费h精品视频在线播放 | 国产一级性生活视频 | 亚洲五月花 | 青春草免费在线视频 | 免费av网址大全 | 国产中文字幕在线免费观看 | 激情综合站 | 九色91视频 | 欧美日韩在线观看视频 | 欧美性生交大片免网 | 色婷婷激情电影 | 在线看v片成人 | 亚洲精品久久视频 | 欧美日韩在线电影 | 91精品久| 婷婷综合激情 | 天天干,天天射,天天操,天天摸 | av在线免费播放网站 | 午夜美女视频 | 国产亚洲精品久久网站 | 久久99久久99精品中文字幕 | 久久久久国产一区二区三区四区 | 九九热免费精品视频 | 亚洲精品玖玖玖av在线看 | 99re久久资源最新地址 | 欧美久久电影 | 亚洲高清视频在线观看 | 亚洲综合网 | 91亚洲视频在线观看 | 国产精品原创在线 | 国产精品午夜久久 | 91九色精品国产 | 欧美午夜性生活 | 国产高清不卡一区二区三区 | 在线免费黄色片 | 亚洲成人资源在线观看 | 亚洲少妇xxxx | 日韩中文在线播放 | 五月婷婷另类国产 | 国产一区免费在线观看 | 中文字幕免费成人 | 亚洲午夜精品在线观看 | 日本女人在线观看 | 97成人啪啪网 | 成人一级电影在线观看 | 蜜桃麻豆www久久囤产精品 | 久久久久久看片 | 91色偷偷 | 色婷婷激婷婷情综天天 | 国产在线不卡视频 | 国产成人精品久久亚洲高清不卡 | 久草在线国产 | 99久高清在线观看视频99精品热在线观看视频 | 激情丁香综合 | 精品视频资源站 | 一级欧美黄 | 一区二区视频在线观看免费 | 成 人 黄 色 视频 免费观看 | 久久久久久国产精品亚洲78 | 国产视频亚洲精品 | 狠狠狠综合 | 日本激情动作片免费看 | 丁香综合av | 99久久爱 | 国产精品一区二区久久精品爱微奶 | 最新超碰 | 久久综合加勒比 | 伊人官网 | 人人狠狠综合久久亚洲 | 国产精品观看在线亚洲人成网 | 久久99精品国产99久久6尤 | 精品视频123区在线观看 | 色偷偷中文字幕 | 亚洲精品五月 | 97色涩| 亚洲九九精品 | 日韩av电影手机在线观看 | 成年人免费av网站 | 精品日韩在线一区 | 中文字幕中文中文字幕 | 香蕉久草在线 | 中文字幕在线免费看线人 | 免费一区在线 | 中文字幕亚洲在线观看 | 午夜三级影院 | 午夜精品一区二区三区免费 | 狠狠gao| 五月婷婷在线观看视频 | 久久久久久在线观看 | 91高清免费在线观看 | 日韩av手机在线看 | 免费中文字幕 | 综合亚洲视频 | 亚洲天堂视频在线 | 深夜免费小视频 | 国产在线精品播放 | 91看片看淫黄大片 | 五月天亚洲综合小说网 | 婷婷色综合色 | 正在播放国产一区二区 | 蜜臀av麻豆| 高清不卡毛片 | 久久婷婷激情 | 狠狠狠色丁香婷婷综合激情 | 欧美日韩精品在线观看视频 | 九九九免费视频 | 日韩欧美一区二区三区视频 | 91伊人影院 | 亚洲精品国产日韩 | av电影免费看 | 日日夜夜骑 | 久久久久免费精品国产小说色大师 | 日韩乱理 | 欧美成人中文字幕 | 99精品免费久久久久久久久日本 | 成人av网站在线观看 | www中文在线 | 三上悠亚一区二区在线观看 | 91成人免费看 | 久久激情影院 | 国产第一福利 | 9992tv成人免费看片 | 91九色在线视频观看 | av在观看| 五月天婷婷丁香花 | 国产一区二区免费 | 免费看污的网站 | 久久精品亚洲精品国产欧美 | 看片网站黄色 | 亚洲男人天堂a | 日韩一区二区三区高清免费看看 | 国产精品麻豆欧美日韩ww | 99视频播放| 91片黄在线观 | 500部大龄熟乱视频使用方法 | 亚洲第一色 | 在线播放第一页 | 91伊人久久大香线蕉蜜芽人口 | 国产裸体永久免费视频网站 | 成人av观看 | 国产视频一区在线 | 欧美日韩亚洲第一 | 午夜精品久久久久久久99热影院 | 国产精品对白一区二区三区 | 久久成人亚洲欧美电影 | 娇妻呻吟一区二区三区 | 午夜99| 激情久久综合 | 91精品久久久久久 | 久久综合中文字幕 | www色综合| 久操视频在线免费看 | 日韩一区二区三区高清免费看看 | 久久人人爽人人爽人人片av免费 | 国产婷婷vvvv激情久 | 奇米7777狠狠狠琪琪视频 | 欧美精品v国产精品v日韩精品 | 国产欧美精品一区二区三区 | 激情五月伊人 | 99久久er热在这里只有精品15 | 欧美精品一级视频 | 国产成人精品午夜在线播放 | 日韩高清一区二区 | 久久av网址 | 亚洲国产日韩一区 | 国产欧美精品一区二区三区 | 亚洲专区中文字幕 | 韩国av一区 | 久久久久久久99精品免费观看 | 亚洲动漫在线观看 | 亚洲欧美国产精品va在线观看 | 最近中文字幕在线播放 | 中文不卡视频 | 中文字幕欧美日韩va免费视频 | 特级xxxxx欧美 | 国产黄色精品在线 | 亚洲精品动漫成人3d无尽在线 | 天天色欧美 | 亚洲激情p | 久久久999免费视频 日韩网站在线 | 911国产精品 | 久久99偷拍视频 | 精品久久久免费视频 | 日韩欧美精品一区二区 | 亚洲人人射 | 国产色女 | 91av资源在线 | 伊香蕉大综综综合久久啪 | 福利视频一区二区 | 四虎影视精品永久在线观看 | 免费日韩电影 | 亚洲一区日韩精品 | 日韩免费在线看 | 久久激情视频免费观看 | av中文字幕免费在线观看 | 一区 二区电影免费在线观看 | 99热国产在线中文 | 国产精品日韩久久久久 | 国产亚洲午夜高清国产拍精品 | 色综合天天在线 | 丁香婷婷激情国产高清秒播 | 日韩av不卡在线播放 | 欧美a级成人淫片免费看 | 欧美美女激情18p | 久久免费精品一区二区三区 | 一本一道久久a久久精品蜜桃 | 99久久精品免费看国产麻豆 | 在线国产一区二区三区 | 日韩一级电影在线 | 亚洲国产中文字幕在线观看 | 国产中文字幕久久 | 午夜精品久久久久久久99水蜜桃 | 在线精品观看国产 | 久久久这里有精品 | 精品一区免费 | 中文字幕色在线视频 | 久草香蕉在线视频 | 亚洲欧美日韩在线一区二区 | 一区二区三区在线免费观看 | 日韩av中文 | 国产福利免费在线观看 | 九九九免费视频 | 男女啪啪视屏 | 亚洲午夜剧场 | 国产一级二级在线 | 91福利小视频 | 日韩无在线| 色婷婷啪啪免费在线电影观看 | 日本三级中文字幕在线观看 | 亚洲精品黄网站 | 久久视频免费 | 亚洲观看黄色网 | www.狠狠 | 911久久| 69av久久 | 欧美日韩高清一区二区三区 | 国产亚洲精品久久久久久无几年桃 | 69亚洲乱 | 免费色av| 欧美久久影院 | 99久久精品国产免费看不卡 | 99久久国产免费,99久久国产免费大片 | 国产精品中文字幕在线 | 国产不卡一二三区 | 日b视频在线观看网址 | 中国一级片在线播放 | 欧美性生活一级片 | 成全在线视频免费观看 | 在线看福利av| 亚洲国产中文在线 | 久久天天躁夜夜躁狠狠85麻豆 | 在线成人欧美 | 国产在线高清 | 欧美日韩国产精品久久 | 免费高清在线视频一区· | 激情综合网五月婷婷 | 婷婷久月 | 天天草夜夜 | 亚洲精品九九 | 久久综合久久综合久久综合 | 久久久精品免费观看 | 二区三区在线观看 | 久久久久久久网站 | 午夜精品久久久久久久99无限制 | 爱爱av网站 | 激情伊人五月天 | 看国产黄色大片 | 久久成年人 | 亚洲男女精品 | 国产午夜亚洲精品 | 成人免费观看视频大全 | 综合五月婷婷 | 在线观看日韩一区 | 久久伊人精品天天 | 国产美女黄网站免费 | 免费日韩视频 | 蜜臀一区二区三区精品免费视频 | 精品国产1区二区 | 日日夜夜精品免费视频 | 欧美精品天堂 | 欧美久久久久久久久久久 | 欧美色图一区 | 久草免费电影 | 亚洲精品永久免费视频 | 欧美污网站 | 日韩在线中文字幕 | 最近中文字幕国语免费av | 欧美日韩视频 | 日韩理论电影在线观看 | 久草线 | 免费进去里的视频 | 日韩久久久久久久 | 黄色小说视频网站 | 午夜精品一区二区三区在线观看 | 亚洲电影成人 | 欧美亚洲免费在线一区 | 亚洲,播放| 欧美另类亚洲 | 日韩二区在线播放 | 欧美另类高潮 | 成年人av在线播放 | 美女黄久久 | 午夜在线免费观看视频 | 亚洲精品在线观看的 | 国产日韩欧美在线一区 | av看片在线 | 99久久久久成人国产免费 | 免费看三级网站 | 久久精品视频一 | 国产在线观看不卡 | 91在线看免费 | 久久男女视频 | 婷婷网址| 欧美在线一级片 | 99久精品视频 | 国产午夜小视频 | 免费国产在线精品 | 久久96| 91cn国产在线 | 亚洲国产欧美在线看片xxoo | 丁香 久久 综合 | 日韩av在线小说 | 国产高清视频免费最新在线 | 免费三级大片 | 精品国产诱惑 | 91精品网站在线观看 | 亚洲国产精品成人av | 免费韩国av | 国产最新在线 | 亚洲视频一| 久久免费av电影 | 亚洲激情精品 | 九九久久电影 | 国产精品不卡在线 | 日本婷婷色 | 欧美日韩高清在线一区 | 一区二区三区在线观看中文字幕 | 97超碰人人澡人人 | 久久久久久久国产精品视频 | 狠狠伊人 | 午夜av激情 | 亚洲日本va中文字幕 | 精品一区 在线 | 337p日本欧洲亚洲大胆裸体艺术 | 97在线视频观看 | 成人一级片在线观看 | 香蕉网在线| 国产精品专区在线观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 精品国产aⅴ麻豆 | 亚洲精品免费观看视频 | 亚洲人成精品久久久久 | 在线观看mv的中文字幕网站 | 99电影 | 国产在线成人 | 免费日韩一区二区三区 | 中文字幕av在线电影 | 天天操天天操一操 | 99热国产在线 | 五月香婷| 精品久久视频 | 日韩精品一区在线播放 | 亚洲日本国产 | av一级片在线观看 | 九九九热精品免费视频观看 | 五月天婷亚洲天综合网精品偷 | 日韩久久久久久久久久 | 在线日韩中文 | 热久久这里只有精品 | 五月天色网站 | 福利视频入口 | 国产视频在线观看一区 | 午夜久久久久 | av在线电影网站 | www.夜夜夜| 97免费公开视频 | 人人看人人做人人澡 | 人人澡人 | 操操操操网 | 国产精品久久久久久久久久久久久久 | 黄色亚洲精品 | 永久免费观看视频 | 在线免费看黄色 | 五月婷婷网站 | 国产香蕉视频在线观看 | 夜色资源网 | 国产精品不卡视频 | 久久久国产精品人人片99精片欧美一 | 久久精品国产亚洲精品2020 | 亚洲精品视频免费在线观看 | 激情五月在线视频 | 一区二区三区四区久久 | 天堂va在线高清一区 | 91福利区一区二区三区 | 国精产品永久999 | 91网在线| 在线精品亚洲 | 人人超碰97 | 免费的国产精品 | 伊人资源视频在线 |