zoukankan      html  css  js  c++  java
  • react-jd-index

    看见一些代码的产物,会觉得非常的漂亮感谢无私开源的程序员们你们是最可爱的人儿~~

    //index.jsx
    
    require('./app/lib/common.css');
    import React from 'react';
    import ReactDOM from 'react-dom';
    
    import Search from './app/components/search.jsx'; 
    import Header from './app/components/header.jsx'; 
    import Otherapp from './app/components/otherapp.jsx'; 
    import Spike from './app/components/spike.jsx'; 
    import More from './app/components/more.jsx'; 
    import Like from './app/components/like.jsx'; 
    
    ReactDOM.render(
    	<div>
    		<Search />
    		<Header source="http://localhost:3000/data/swiper" />
    		<Otherapp source="http://localhost:3000/data/otherapp" />
    		<Spike source="http://localhost:3000/data/spike" />
    		<More source="http://localhost:3000/data/more" />
    		<Like source="http://localhost:3000/data/like" />
    	</div>, 
    	document.querySelector("#myApp")
    );
    
    
    //index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0, minimal-ui" />
    	<title>JD_demo</title>
    	<style>
    		.bg {
    			background: #f3f5f7;
    		}
    	</style>
    </head>
    <body class="bg">
    	<div class="container">
    		<div id="myApp"></div>
    	</div>
    	<script src="./bundle.js" type="text/javascript"></script>
    </body>
    </html>
    
    
    //封装的jsonp.js
    //app/util/jsonp.js
    
    ;(function () {
        /**
         * JSONP操作
         * @param url : 请求的url
         * @param data : 发送数据
         * @param jsonpcallback : 服务器给出的JSONP端口的API名称
         * @param callback : 执行JSONP获取数据的回调函数
         */
        var jsonp = function (url, data, jsonpcallback, callback) {
            var cbName = 'cb' + jsonp.count++;
            var callbackName = 'window.jsonp.' + cbName;
            window.jsonp[cbName] = function (jsonpData) {
                try {
                    callback(jsonpData);
                } finally {
                    script.parentNode.removeChild(script);
                    delete window.jsonp[cbName];
                }
            };
            var script = document.createElement('script');
            if (data) {
                data = tool.encodeToURIString(data);
            }
            if (typeof jsonpcallback === 'string') {
                var jsonpData = jsonpcallback + '=' + callbackName;
            }
            url = tool.hasSearch(url, data);
            url = tool.hasSearch(url, jsonpData);
            script.src = url;
            document.body.appendChild(script);
        };
        jsonp.count = 0;
        window.jsonp = jsonp;
        var tool = {
            encodeToURIString: function (data) {
                if (!data) return '';
                if (typeof data === 'string') return data;
                var arr = [];
                for (var n in data) {
                    if (!data.hasOwnProperty(n)) continue;
                    arr.push(encodeURIComponent(n) + '=' + encodeURIComponent(data[n]));
                }
                return arr.join('&');
            },
            hasSearch: function (url, padString) {
                if (!padString) return url;
                if (typeof padString !== 'string') return url;
                return url + (/?/.test(url) ? '&' : '?') + padString;
            }
        }
    })();
    
    module.exports = jsonp;
    
    

    //app/components/header.jsx
    
    require("./header.css");
    require('../lib/swiper.min.css');
    let Swiper = require('../lib/swiper.min.js');
    let jsonp = require('../util/jsonp.js');
    
    import React from 'react';     
    
    let Header = React.createClass({
    	getInitialState: function() {
            return {
            	imgUrls: [],
            };
     	},
    	componentDidMount: function() {
    		jsonp(this.props.source, "", "callback", (data) => {
    			if(data.status) {
    				//如果组件渲染到了 DOM 中,isMounted() 返回 true。
    				//可以使用该方法保证 setState() 和 forceUpdate() 
    				//在异步场景下的调用不会出错。
    				console.log('data.status.....',data.status);
    				if(this.isMounted()) {
    					this.setState({
    						imgUrls: data.data,
    					})
    				    new Swiper ('#header .swiper-container', {
    					    loop: true,
    					    pagination: '.swiper-pagination',
    					    paginationClickable: true,
    					    autoplay : 3000,
    						autoplayDisableOnInteraction : false,		    
    					}) 
    				}	
    			}else {
    				alert(data.msg);
    			}
    		}); 
    	},
    
    	render: function () {
    		let countId = 0;
    	    return (
    	      <div id="header">
        		<div className="swiper-container">
    			    <div className="swiper-wrapper">
    			    	{
    			    		this.state.imgUrls.map((url) => {
    			    			return <div className="swiper-slide" key={"header" + countId++} >
    			    						<img className="img" src={url} />
    			    				   </div>
    			    		})
    			    	}
    			    </div>
    				<div className="swiper-pagination"></div>
    			</div>
    	      </div>
    	    );
    	  }
    })
    
    module.exports = Header;
    
    

    //app/components/search.jsx
    
    require('./search.css');
    import React from 'react'; 
    
    let Search = React.createClass({
    	getInitialState: function() {
    		return {
    			bg: "transparent",
    		}
    	},
    	componentDidMount: function() {
    		//向下滑动,搜索框固定不变,滚动一定距离,就改变背景色
    		window.onscroll = (event) => {
    			let realHeight = document.documentElement.scrollTop || document.body.scrollTop;
    			let optatic = 0.8 * (realHeight/142);
    			if(optatic <= 0.8 ) {
    				this.setState({
    					bg: `rgba(234, 44, 44, ${optatic})`,
    				})
    			}
    		}
    	},
    	render: function() {
    		let bColor = this.state.bg ? this.state.bg : 'transprent';
    		return (
    			<div id="search" className="pf"  style={{ background: bColor }}>
    				<div className="search pr">
    					<div className="sl pa">
    						<i></i>
    					</div>
    					<div className="frc pr">
    						<span className="searchicon pa"></span>
    						<form>
    							<input placeholder="全场畅饮,部分低至99减50" type="text"/>
    						</form>
    					</div>
    					<div className="sub pa">
    						<span>登录</span>
    					</div>
    				</div>
    			</div>
    		);
    	}
    })
    
    module.exports = Search;
    

    //app/components/like.jsx
    
    require('./like.css');
    let jsonp = require('../util/jsonp.js');
    import React from 'react'; 
    
    let Like = React.createClass({
    	getInitialState: function() {
    		return {
    			stores: [],
    		}
    	},
    
    	componentDidMount: function() {
    		jsonp(this.props.source, "", "callback", (data) => {
    			console.log('aaaaa',data);
    			if(data.status) {
    				if(this.isMounted()) {
    					this.setState({
    						stores: data.data,
    					});
    				}
    			}else {
    				alert(data.msg);
    				reject("get data error!")
    			}
    		})
    	},
    
    	render: function() {
    		let countId = 0;
    		return (
    			<div id="like">
    				<p>猜你喜欢</p>
    				{
    					this.state.stores.map((item) => {
    						return <div className="like_content" key={"like" + countId++}>
    									<div className="like_link">
    										<a href={ item.url }>
    											<img src={ item.icon } alt=""/>
    										</a>
    									</div>
    									<div className="like_desc">
    										<span>
    											{ item.desc }		
    										</span>
    									</div>
    									<div className="like_price">
    										<span>¥{ item.price }</span>
    										<div><a href={ item.more }>看相似</a></div>
    									</div>
    								</div>
    					})
    				}
    			</div>
    		);
    	}
    })
    
    module.exports = Like;
    

    //app/components/more.jsx
    
    require('./more.css');
    require('../lib/swiper.min.css');
    let Swiper = require('../lib/swiper.min.js');
    let jsonp = require('../util/jsonp.js');
    import React from 'react'; 
    
    var More = React.createClass({
    	getInitialState: function() {
            return {
            	more1: [],
            	more2: [],
            	more3: [],
            };
     	},
    
    	componentDidMount: function() {
    		jsonp(this.props.source, "", "callback", (data) => {
    			console.log('~~~~~~data',data);
    			if(data.status) {
    					// 将值分成了三部分,进行处理
    				if(this.isMounted()) {
    					this.setState({
    						more1: data.data.slice(0,3),
    						more2: data.data.slice(3,5),
    						more3: data.data.slice(5,7),
    					})
    				    new Swiper ('.more_bottom .swiper-container', {
    					    loop: true,
    					    pagination: '.swiper-pagination',
    					    paginationClickable: true,
    					    autoplay : 2000,
    						autoplayDisableOnInteraction : false,		    
    					}) 
    				}
    			}else {
    				alert(data.msg);
    			}
    		});
    	},
    
    	render: function() {
    
    		let countId = 0;
    		return (
    			<div id="more">
    				<div className="more_top">
    					{
    						this.state.more1.map((item) => {
    							return <div className="more_link" key={"more" + countId++}>
    										<a href={item.url}>
    											<img src={item.icon} alt=""/>
    										</a>
    									</div>
    						})
    					}
    				</div>
    				<div className="more_middle">
    					{
    						this.state.more2.map((item) => {
    							return <div className="more_style" key={"more" + countId++}>
    										<a href={item.url}>
    											<img src={item.icon} alt=""/>
    										</a>
    									</div>
    						})
    					}
    				</div>
    				<div className="more_bottom">
    					<div className="swiper-container">
    						<div className="swiper-wrapper">
    							{
    								this.state.more3.map((item) => {
    									return  <div className="swiper-slide" key={"more" + countId++}>
    												<a href={item.url}>
    													<img src={item.icon} alt=""/>
    												</a>
    											</div>
    								})
    							}
    						</div>
    						<div className="swiper-pagination"></div>
    					</div>
    				</div>
    			</div>
    		);
    	}
    })
    
    module.exports = More;
    

    //app/components/otherapp.jsx
    
    require('./otherapp.css');
    let jsonp = require('../util/jsonp.js');
    
    import React from 'react'; 
    
    let Otherapp = React.createClass({
    	getInitialState: function() {
            return {
            	apps: [],
            };
     	},
    
     	componentDidMount: function() {
     		jsonp(this.props.source, "", "callback", (data) => {
     			console.log('otherapp',data);
     			if(data.status) {
     				if(this.isMounted()) {
     					this.setState({
     						apps: data.data,
     					})
     				}
     			}else {
     				alert(data.msg);
     			}
     		});
     	},
     	
    	render: function() {
    		let countId = 0;
    		return (
    			<div className="oapp">
    				<ul>
    					{
    						this.state.apps.map((app) => {
    							return <li key={ "otherapp" + countId++ }>
    										<a href={ app.url }>
    											<div className="app_icon">
    												<img src={ app.icon } alt=""/>
    											</div>
    											<span>{ app.title }</span>
    										</a>
    									</li>
    						})
    					}
    				</ul>
    			</div>
    		);
    	}
    })
    
    module.exports = Otherapp;
    
    //app/components/spike.jsx
    
    require('./spike.css');
    let jsonp = require('../util/jsonp.js');
    import React from 'react'; 
    
    let Spike = React.createClass({
    	getInitialState: function() {
    		return {
    			hour: "00",
    			minutes: "00",
    			second: "00",
    			stores: [],
    			more: ""
    		}
    	},
    
    	formatTime: function(times=0) {
    		times = +times;
    		let hour = 0,
    			minutes = 0,
    			second = 0,
    			regTwo = /^d{2}$/,
    			regInteger = /^(d{1,2}).?d*$/;
    		if(times/3600 >= 1) {
    			hour = times/3600;
    			hour = +regInteger.exec(hour.toString())[1] 
    			times -= hour*3600; 
    			hour = regTwo.test(hour.toString()) ? hour.toString() : `0${hour}`;
    		}
    		if(times/60 >= 1) {
    			minutes = times/60;
    			minutes = +regInteger.exec(minutes.toString())[1] 
    			times -= minutes*60; 
    			minutes = regTwo.test(minutes.toString()) ? minutes.toString() : `0${minutes}`;
    		}
    		second = times;
    		second = regTwo.test(second.toString()) ? second.toString() : `0${second}`;
    		return {
    			hour: hour,
    			minutes: minutes,
    			second: second,
    		}
    	},
    	
    	componentDidMount: function() {	
    		let getData = () => {
    			let promise = new Promise((resolve, reject) => {
    				jsonp(this.props.source, "", "callback", (data) => {
    					console.log('seeedata....',data);
    					if(data.status) {
    						if(this.isMounted()) {
    							this.setState({
    								stores: data.data,
    								more: data.more,
    							});
    							resolve(data.times);
    						}
    					}else {
    						alert(data.msg);
    						reject("get data error!")
    					}
    				})
    			})
    			return promise;
    		}
    
    		getData().then((times) => {
    			times = +times;
    			let timer = window.setInterval(() => {
    				let {hour, minutes, second} = this.formatTime(times--);
    				if(times == -1) {
    					clearInterval(timer);
    					timer = null;
    				}
    				this.setState({
    					hour: hour,
    					minutes: minutes,
    					second: second,
    				});
    			}, 1000);
    		}, (err) => {
    			alert(err);
    		});
    		
    	},
    
    	render: function() {
    		let countId = 0;
    		return (
    			<div id="spike">
    				<div className="spike_header">
    					<i></i>
    					<span className="spike_title">掌上时间</span>
    					<div className="spike_time">
    						{
    							(() => {
    								return  <div>
    											<span>{this.state.hour}</span>:<span>{this.state.minutes}</span>:<span>{this.state.second}</span>
    										</div>
    										
    							})()
    						}
    					</div>
    					<div className="spike_more fr">
    						<i className="fr"></i>
    						<a href={this.state.more}>
    							<span>更多秒杀</span>
    						</a>
    						
    					</div>
    					<div style={{clear:"both"}}></div>
    				</div>
    				<ul className="spike_content">
    					{
    						this.state.stores.map((item) => {
    							return <li key={"spike" + countId++}>
    										<a href={item.url}>
    											<div>
    												<img src={item.icon} alt=""/>
    											</div>
    											<p>¥{item.sprice}</p>
    											<p className="real-price">¥{item.price}</p>
    										</a>
    									</li>
    						})
    					}
    				</ul>
    			</div>
    		);
    	}
    })
    
    module.exports = Spike;
    

    感谢无私开源的程序员哟,可以点击项目的哟

  • 相关阅读:
    菜鸟也为Git疯狂
    C#实现简单的栈和队列
    Entity Framework模型在领域驱动设计界定上下文中的应用
    SQL 关于使用CTE
    《高效程序员的45个习惯》读书笔记
    开源.NET下的XML数据库介绍及入门
    openkm开发环境搭建过程
    ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇
    《Clean Code》Learning
    网络抓包工具 Network Monitor使用方法 Fiddler使用方法
  • 原文地址:https://www.cnblogs.com/smart-girl/p/10857508.html
Copyright © 2011-2022 走看看