├── .gitignore
├── README.md
├── favicon.ico
├── icon
├── icon1.png
├── icon2.png
├── icon3.png
├── icon4.png
├── icon5.png
├── icon6.png
├── icon7.png
├── icon8.png
├── iconfont.css
├── iconfont.eot
├── iconfont.js
├── iconfont.svg
├── iconfont.ttf
└── iconfont.woff
├── index.html
├── package.json
├── screenshot
├── 20170505163109.png
├── film.png
├── index.png
├── movie.png
└── shop.png
├── src
├── components
│ ├── App.js
│ ├── Nav.js
│ ├── TopBar.js
│ ├── cinema
│ │ ├── Cinema.js
│ │ └── CinemaItem.js
│ ├── home
│ │ ├── Home.js
│ │ ├── Item.js
│ │ ├── MovieDetail.js
│ │ └── Slider.js
│ ├── movie
│ │ ├── MoveItem.js
│ │ ├── Movie.js
│ │ └── MovieList.js
│ └── shop
│ │ ├── Shop.js
│ │ └── ShopItem.js
├── css
│ ├── app.js
│ ├── app.scss
│ ├── reset.css
│ └── reset.js
├── data
│ ├── banner.json
│ ├── cinema.json
│ ├── coming-soon-1.json
│ ├── coming-soon-2.json
│ ├── coming-soon-3.json
│ ├── coming-soon-4.json
│ ├── coming-soon-5.json
│ ├── coming-soon.json
│ ├── detail.json
│ ├── now-playing-1.json
│ ├── now-playing-2.json
│ ├── now-playing-3.json
│ ├── now-playing-4.json
│ ├── now-playing-5.json
│ ├── now-playing.json
│ ├── shop-1.json
│ ├── shop-2.json
│ └── shop-3.json
├── index.js
├── router.js
├── store
│ ├── action.js
│ ├── index.js
│ ├── reducer.js
│ └── state.js
└── swipe.js
└── webpack.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log
5 | yarn-error.log
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # maizuo-react
2 | 仿卖座电影,官网地址http://m.maizuo.com/v4/?co=maizuo
3 |
4 |
5 | # 技术栈
6 | * react
7 | * react-router 路由
8 | * redux react-redux 状态管理
9 | * sass css预编译
10 | * swiper 轮播图
11 |
12 | # 界面预览
13 | 
14 | 
15 | 
16 | 
17 | 
18 |
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/favicon.ico
--------------------------------------------------------------------------------
/icon/icon1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon1.png
--------------------------------------------------------------------------------
/icon/icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon2.png
--------------------------------------------------------------------------------
/icon/icon3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon3.png
--------------------------------------------------------------------------------
/icon/icon4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon4.png
--------------------------------------------------------------------------------
/icon/icon5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon5.png
--------------------------------------------------------------------------------
/icon/icon6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon6.png
--------------------------------------------------------------------------------
/icon/icon7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon7.png
--------------------------------------------------------------------------------
/icon/icon8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/icon8.png
--------------------------------------------------------------------------------
/icon/iconfont.css:
--------------------------------------------------------------------------------
1 |
2 | @font-face {font-family: "iconfont";
3 | src: url('iconfont.eot?t=1493347998960'); /* IE9*/
4 | src: url('iconfont.eot?t=1493347998960#iefix') format('embedded-opentype'), /* IE6-IE8 */
5 | url('iconfont.woff?t=1493347998960') format('woff'), /* chrome, firefox */
6 | url('iconfont.ttf?t=1493347998960') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
7 | url('iconfont.svg?t=1493347998960#iconfont') format('svg'); /* iOS 4.1- */
8 | }
9 |
10 | .iconfont {
11 | font-family:"iconfont" !important;
12 | font-size:16px;
13 | font-style:normal;
14 | -webkit-font-smoothing: antialiased;
15 | -moz-osx-font-smoothing: grayscale;
16 | }
17 |
18 | .icon-back:before { content: "\e6c9"; }
19 |
20 | .icon-right:before { content: "\e613"; }
21 |
22 | .icon-menu:before { content: "\e6c1"; }
23 |
24 | .icon-down:before { content: "\e611"; }
25 |
26 | .icon-my:before { content: "\e6c3"; }
27 |
28 |
--------------------------------------------------------------------------------
/icon/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/iconfont.eot
--------------------------------------------------------------------------------
/icon/iconfont.js:
--------------------------------------------------------------------------------
1 | ;(function(window) {
2 |
3 | var svgSprite = ''
36 | var script = function() {
37 | var scripts = document.getElementsByTagName('script')
38 | return scripts[scripts.length - 1]
39 | }()
40 | var shouldInjectCss = script.getAttribute("data-injectcss")
41 |
42 | /**
43 | * document ready
44 | */
45 | var ready = function(fn) {
46 | if (document.addEventListener) {
47 | if (~["complete", "loaded", "interactive"].indexOf(document.readyState)) {
48 | setTimeout(fn, 0)
49 | } else {
50 | var loadFn = function() {
51 | document.removeEventListener("DOMContentLoaded", loadFn, false)
52 | fn()
53 | }
54 | document.addEventListener("DOMContentLoaded", loadFn, false)
55 | }
56 | } else if (document.attachEvent) {
57 | IEContentLoaded(window, fn)
58 | }
59 |
60 | function IEContentLoaded(w, fn) {
61 | var d = w.document,
62 | done = false,
63 | // only fire once
64 | init = function() {
65 | if (!done) {
66 | done = true
67 | fn()
68 | }
69 | }
70 | // polling for no errors
71 | var polling = function() {
72 | try {
73 | // throws errors until after ondocumentready
74 | d.documentElement.doScroll('left')
75 | } catch (e) {
76 | setTimeout(polling, 50)
77 | return
78 | }
79 | // no errors, fire
80 |
81 | init()
82 | };
83 |
84 | polling()
85 | // trying to always fire before onload
86 | d.onreadystatechange = function() {
87 | if (d.readyState == 'complete') {
88 | d.onreadystatechange = null
89 | init()
90 | }
91 | }
92 | }
93 | }
94 |
95 | /**
96 | * Insert el before target
97 | *
98 | * @param {Element} el
99 | * @param {Element} target
100 | */
101 |
102 | var before = function(el, target) {
103 | target.parentNode.insertBefore(el, target)
104 | }
105 |
106 | /**
107 | * Prepend el to target
108 | *
109 | * @param {Element} el
110 | * @param {Element} target
111 | */
112 |
113 | var prepend = function(el, target) {
114 | if (target.firstChild) {
115 | before(el, target.firstChild)
116 | } else {
117 | target.appendChild(el)
118 | }
119 | }
120 |
121 | function appendSvg() {
122 | var div, svg
123 |
124 | div = document.createElement('div')
125 | div.innerHTML = svgSprite
126 | svgSprite = null
127 | svg = div.getElementsByTagName('svg')[0]
128 | if (svg) {
129 | svg.setAttribute('aria-hidden', 'true')
130 | svg.style.position = 'absolute'
131 | svg.style.width = 0
132 | svg.style.height = 0
133 | svg.style.overflow = 'hidden'
134 | prepend(svg, document.body)
135 | }
136 | }
137 |
138 | if (shouldInjectCss && !window.__iconfont__svg__cssinject__) {
139 | window.__iconfont__svg__cssinject__ = true
140 | try {
141 | document.write("");
142 | } catch (e) {
143 | console && console.log(e)
144 | }
145 | }
146 |
147 | ready(appendSvg)
148 |
149 |
150 | })(window)
--------------------------------------------------------------------------------
/icon/iconfont.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
53 |
--------------------------------------------------------------------------------
/icon/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/iconfont.ttf
--------------------------------------------------------------------------------
/icon/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/icon/iconfont.woff
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 电影
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-obj",
3 | "version": "1.0.0",
4 | "description": "play and test",
5 | "repository": "http://github/wan9alex.io",
6 | "main": "index.js",
7 | "scripts": {
8 | "test": "echo \"Error: no test specified\" && exit 1",
9 | "dev": "webpack-dev-server --hot --inline --open --port 8001 --history-api-fallback",
10 | "build": "webpack -p"
11 | },
12 | "author": "wan9",
13 | "license": "ISC",
14 | "devDependencies": {
15 | "babel-core": "^6.21.0",
16 | "babel-loader": "^6.2.10",
17 | "babel-preset-es2015": "^6.18.0",
18 | "babel-preset-react": "^6.16.0",
19 | "babel-preset-stage-2": "^6.18.0",
20 | "css-loader": "^0.23.1",
21 | "extract-text-webpack-plugin": "^1.0.1",
22 | "fetch-jsonp": "^1.0.6",
23 | "file-loader": "^0.8.5",
24 | "jsx-loader": "^0.13.2",
25 | "node-sass": "^3.13.0",
26 | "pubsub-js": "^1.5.6",
27 | "rc-queue-anim": "^0.13.3",
28 | "react": "^15.3.2",
29 | "react-addons-css-transition-group": "^15.4.2",
30 | "react-dom": "^15.3.2",
31 | "react-redux": "^5.0.3",
32 | "react-router": "^3.0.0",
33 | "react-router-dom": "^4.0.0",
34 | "redux": "^3.6.0",
35 | "redux-thunk": "^2.2.0",
36 | "sass-loader": "^4.0.2",
37 | "style-loader": "^0.13.1",
38 | "url-loader": "^0.5.7",
39 | "webpack": "^1.13.1",
40 | "webpack-dev-server": "^1.16.2"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/screenshot/20170505163109.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/screenshot/20170505163109.png
--------------------------------------------------------------------------------
/screenshot/film.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/screenshot/film.png
--------------------------------------------------------------------------------
/screenshot/index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/screenshot/index.png
--------------------------------------------------------------------------------
/screenshot/movie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/screenshot/movie.png
--------------------------------------------------------------------------------
/screenshot/shop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cncp20/maizuo-react/843b70cd780b8394dbf28d340ad13ed2bf4bd5f3/screenshot/shop.png
--------------------------------------------------------------------------------
/src/components/App.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "../css/app.scss";
3 | import Nav from "./Nav";
4 | import TopBar from "./TopBar";
5 | import {connect} from "react-redux";
6 |
7 |
8 | class App extends React.Component {
9 | render() {
10 | let {navShow} = this.props;
11 | return (
12 |
13 |
14 | {navShow ? : ""}
15 | {this.props.children}
16 |
17 | );
18 | }
19 | }
20 | const mapState = (state) => {
21 | return {
22 | navShow: state.navShow
23 | }
24 | }
25 | const mapDispatch = (dispatch) => {
26 | return {
27 |
28 | }
29 | }
30 | export default connect(mapState,mapDispatch)(App);
31 |
--------------------------------------------------------------------------------
/src/components/Nav.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDom from "react-dom";
3 | import {Link} from "react-router";
4 | import {connect} from "react-redux";
5 |
6 | class Nav extends React.Component {
7 | constructor() {
8 | super();
9 | this.state = {
10 | navList: [
11 | { name: '首页', path: "home" },
12 | { name: '影片', path: "movie" },
13 | { name: '影院', path: "cinema" },
14 | { name: '商城', path: "shop" }
15 | ]
16 | }
17 | }
18 | render() {
19 | let {toggleNav } = this.props;
20 | return (
21 |
22 |
23 | {this.state.navList.map((item, index) => {
24 | return - {item.name}
25 | })}
26 |
27 |
28 | );
29 | }
30 | }
31 | const mapState = (state) => {
32 | return {
33 | navShow: state.navShow
34 | }
35 | }
36 | const mapDispatch = (dispatch) => {
37 | return {
38 | toggleNav: (ev) => {
39 | dispatch({
40 | type:"TOGGLE_NAV"
41 | })
42 | ev.stopPropagation();
43 | }
44 | }
45 | }
46 | export default connect(mapState,mapDispatch)(Nav);
--------------------------------------------------------------------------------
/src/components/TopBar.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import {connect} from "react-redux";
3 |
4 | class TopBar extends React.Component {
5 | render() {
6 | let {toggleNav} = this.props;
7 | return (
8 |
13 | );
14 | }
15 | }
16 | const mapState = (state) => {
17 | return {
18 |
19 | }
20 | }
21 | const mapDispatch = (dispatch) => {
22 | return {
23 | toggleNav: () => {
24 | dispatch({
25 | type:"TOGGLE_NAV"
26 | })
27 | }
28 | }
29 | }
30 |
31 | export default connect(mapState,mapDispatch)(TopBar);
--------------------------------------------------------------------------------
/src/components/cinema/Cinema.js:
--------------------------------------------------------------------------------
1 | import React,{Component} from "react";
2 | import CinemaItem from "./CinemaItem";
3 |
4 | class Cinema extends Component {
5 | constructor() {
6 | super();
7 | this.state = {
8 | cinemas:[]
9 | };
10 | }
11 | componentDidMount() {
12 | fetch("/src/data/cinema.json").then((res) => {
13 | if (res.ok) {
14 | res.json().then((data) => {
15 | this.setState({
16 | cinemas: data.data.cinemas
17 | })
18 | })
19 | }else {
20 | console.log("error");
21 | }
22 | })
23 | }
24 |
25 | render() {
26 | let cinemas = this.state.cinemas;
27 | return (
28 |
29 | {cinemas.length !== 0 ? cinemas.map((item , index) => {
30 | return
31 | }): ""}
32 |
33 | )
34 | }
35 |
36 | }
37 |
38 | export default Cinema;
--------------------------------------------------------------------------------
/src/components/cinema/CinemaItem.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | class CinemaItem extends React.Component {
4 | render() {
5 | let cinema = this.props.cinema;
6 | return (
7 |
8 |
{cinema.name}
9 |
10 | {cinema.labels.map((item, index) => {
11 | return {item.name}
12 | })}
13 |
14 |
{cinema.address}
15 |
16 | );
17 | }
18 | }
19 |
20 | export default CinemaItem;
--------------------------------------------------------------------------------
/src/components/home/Home.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDom from "react-dom";
3 | import Item from "./Item";
4 | import Slider from "./Slider";
5 | import { Link } from "react-router";
6 |
7 | class Home extends React.Component {
8 | constructor() {
9 | super();
10 | this.state = {
11 | banner: [],
12 | nowPlaying: [],
13 | comingSoon: []
14 | }
15 | }
16 | render() {
17 | let nowPlaying = this.state.nowPlaying;
18 | let comingSoon = this.state.comingSoon;
19 | return (
20 |
21 | {this.state.banner.length !== 0 ?
: ""}
22 | {nowPlaying.length !== 0 ?
23 | {
24 | nowPlaying.map((item, index) => {
25 | return
26 | })
27 | }
28 | 更多热映电影
29 |
: ""}
30 |
31 | {comingSoon.length !== 0 ?
32 |
33 | {
34 | comingSoon.map((item, index) => {
35 | return
36 | })
37 | }
38 |
更多即将上映电影
39 |
: ""}
40 |
41 | );
42 | }
43 | componentDidMount() {
44 | var mySwipe = new Swipe(document.getElementById("banner"), {
45 | auto: 2000,
46 | continuous: true,
47 | stopPropation: true
48 | });
49 | fetch("/src/data/banner.json").then((res) => {
50 | if (res.ok) {
51 | return res.json();
52 | } else {
53 | console.log("error");
54 | }
55 | }).then((data) => {
56 | this.setState({
57 | banner: data.data.billboards
58 | })
59 | fetch("/src/data/now-playing.json").then((res) => {
60 | if (res.ok) {
61 | res.json().then((data) => {
62 | this.setState({
63 | nowPlaying: data.data.films
64 | })
65 | });
66 | } else {
67 | console.log("error");
68 | }
69 | });
70 | fetch("/src/data/coming-soon.json").then((res) => {
71 | if (res.ok) {
72 | res.json().then((data) => {
73 | this.setState({
74 | comingSoon: data.data.films
75 | })
76 | });
77 | } else {
78 | console.log("error");
79 | }
80 | });
81 | })
82 | }
83 | }
84 |
85 | export default Home;
--------------------------------------------------------------------------------
/src/components/home/Item.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import {Link} from "react-router";
3 |
4 | class Item extends React.Component {
5 | render() {
6 | let film = this.props.film;
7 | return (
8 |
9 |
10 |

11 | {
12 | !film.isComingSoon ?
13 |
{film.name}{film.grade}
14 |
{film.cinemaCount}家影院上映 {film.watchCount}人购票
15 |
:
16 |
{film.name}{this.formatDate(film.premiereAt)}
17 |
18 | }
19 |
20 |
21 | );
22 | }
23 | formatDate(time) {
24 | let date = new Date(time);
25 | return (date.getMonth() + 1) + "月" + date.getDate() + "日上映"
26 | }
27 | }
28 |
29 | export default Item;
--------------------------------------------------------------------------------
/src/components/home/MovieDetail.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 |
3 | class MovieDetail extends Component {
4 | constructor() {
5 | super();
6 | this.state = {
7 | film:{}
8 | }
9 | }
10 | componentDidMount() {
11 | fetch("/src/data/detail.json").then((res) => {
12 | if(res.ok) {
13 | res.json().then((data) => {
14 | this.setState({
15 | film:data.data.film
16 | })
17 | })
18 | }else {
19 | console.log("error");
20 | }
21 | })
22 | }
23 | render() {
24 | let film = this.state.film;
25 | return (
26 | !film.name ? :
27 |

28 |
29 |
影片简介
30 |
导演:{film.director}
31 |
主演:{film.actors.map((item, index) => {
32 | return {item.name}
33 | })}
34 |
语言:{film.language}
35 |
类型:{film.category}
36 |
上映时间:{this.formatDate(film.premiereAt)}
37 |
{film.synopsis}
38 |
39 |
40 | )
41 | }
42 | formatDate(time) {
43 | let date = new Date(time);
44 | return (date.getMonth() + 1) + "月" + date.getDate() + "日上映"
45 | }
46 | }
47 |
48 | export default MovieDetail;
--------------------------------------------------------------------------------
/src/components/home/Slider.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | class Slider extends Component {
3 | componentDidMount() {
4 | var mySwipe = new Swipe(document.getElementById("banner-container"), {
5 | continuous:true,
6 | stopPropation:true,
7 | auto:4000
8 | })
9 | }
10 | render() {
11 | return (
12 |
13 |
14 | {
15 | this.props.banner.map((item, index) => {
16 | return 
17 | })
18 | }
19 |
20 |
21 |
22 | );
23 | }
24 | }
25 | export default Slider;
--------------------------------------------------------------------------------
/src/components/movie/MoveItem.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import {Link} from "react-router";
3 |
4 | class MovieItem extends React.Component {
5 | render() {
6 | let film = this.props.film;
7 | return (
8 |
9 |
10 |

11 |
12 |
{film.name}{film.grade}
13 |
{film.intro}
14 |
{film.cinemaCount}家影院上映 {film.watchCount}人购票
15 |
16 |
17 |
18 | );
19 | }
20 | }
21 |
22 | export default MovieItem;
--------------------------------------------------------------------------------
/src/components/movie/Movie.js:
--------------------------------------------------------------------------------
1 | import React, {
2 | Component
3 | } from "react";
4 | import {
5 | Link
6 | } from "react-router";
7 | import {
8 | connect
9 | } from "react-redux";
10 | import MovieList from "./MovieList";
11 |
12 |
13 | import { bindActionCreators } from "redux";
14 | import * as action from "../../store/action";
15 |
16 | class Movie extends Component {
17 | constructor() {
18 | super();
19 | this.state = {
20 | nowData: [],
21 | nowPg: 1
22 | }
23 | this.sc = this.sc.bind(this);
24 | }
25 | componentDidMount() {
26 | let { tabNow, tabComing } = this.props.actions;
27 | if (this.props.router.location.pathname == "/movie/coming-soon") {
28 | tabComing()
29 | } else {
30 | tabNow()
31 | }
32 | }
33 | sc() {
34 | let { isNow, nowPage, comingPage } = this.props;
35 | let { getMoreNow, changeNowPage, getMoreComing, changeComingPage } = this.props.actions;
36 | let el = this.refs.el;
37 | if (el.scrollTop + el.clientHeight >= el.scrollHeight) {
38 | if (isNow) {
39 | if (nowPage >= 5 ) return;
40 | getMoreNow(nowPage + 1);
41 | changeNowPage(nowPage + 1);
42 | } else {
43 | if (comingPage >= 5 ) return;
44 | getMoreComing(comingPage + 1);
45 | changeComingPage(comingPage + 1);
46 | }
47 |
48 | }
49 | }
50 | render() {
51 | let nowData = this.state.nowData;
52 | let { isNow } = this.props;
53 | let { tabNow, tabComing } = this.props.actions;
54 | return (
55 |
56 |
57 | 正在热映
58 | 即将上映
59 |
60 | {
61 | /*this.props.children && React.cloneElement(this.props.children, {tab:this.state.tab })*/
62 | }
63 | < MovieList>
64 |
65 |
66 | )
67 | }
68 | }
69 | const mapStateToProps = (state) => {
70 | return {
71 | isNow: state.isNow,
72 | nowPage: state.nowPage,
73 | comingPage: state.comingPage
74 | }
75 | }
76 | // const mapDispatchToProps = (dispatch) => {
77 | // return {
78 | // tabNow:() => {
79 | // dispatch({
80 | // type:"TAB_NOW"
81 | // });
82 | // },
83 | // tabComing:() => {
84 | // dispatch({
85 | // type:"TAB_COMING"
86 | // });
87 | // }
88 | // }
89 | // }
90 | const mapDispatchToProps = (dispatch) => {
91 | return {
92 | actions: bindActionCreators(action, dispatch)
93 | }
94 | }
95 | export default connect(mapStateToProps, mapDispatchToProps)(Movie);
--------------------------------------------------------------------------------
/src/components/movie/MovieList.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import MovieItem from "./MoveItem";
3 | import { connect } from "react-redux";
4 |
5 | class MovieList extends React.Component {
6 | render() {
7 | let { isNow, nowList, comingList} = this.props;
8 | return (
9 |
10 | {
11 | isNow ? nowList.map((item, index) => {
12 | return
13 | }) : comingList.map((item, index) => {
14 | return
15 | })
16 | }
17 |
18 | );
19 | }
20 | }
21 | const mapStateToProps = (state) => {
22 | return {
23 | isNow: state.isNow,
24 | nowList: state.nowList,
25 | comingList: state.comingList
26 | }
27 | }
28 | const mapDispatchToProps = (dispatch) => {
29 | return {
30 |
31 | }
32 | }
33 | export default connect(mapStateToProps, mapDispatchToProps)(MovieList);
--------------------------------------------------------------------------------
/src/components/shop/Shop.js:
--------------------------------------------------------------------------------
1 | import React,{Component} from "react";
2 | import ShopItem from "./ShopItem";
3 |
4 | class Shop extends Component {
5 | constructor() {
6 | super();
7 | this.state = {
8 | shopData:[],
9 | shopPg:1,
10 | category:[
11 | {name:"3D眼镜", img:"/icon/icon1.png"},
12 | {name:"充电装备", img:"/icon/icon2.png"},
13 | {name:"手机配件", img:"/icon/icon3.png"},
14 | {name:"居家百货", img:"/icon/icon4.png"},
15 | {name:"数据线", img:"/icon/icon5.png"},
16 | {name:"服饰箱包", img:"/icon/icon6.png"},
17 | {name:"模型玩具", img:"/icon/icon7.png"},
18 | {name:"车载用品", img:"/icon/icon8.png"},
19 | ]
20 | }
21 | this.getData = this.getData.bind(this);
22 | this.sc = this.sc.bind(this);
23 | }
24 | componentDidMount() {
25 | this.getData(this.state.shopPg);
26 | }
27 | getData(pg) {
28 | fetch("/src/data/shop-" + pg + ".json").then((res) => {
29 | if (res.ok) {
30 | res.json().then((data) => {
31 | let arr = this.state.shopData;
32 | data.data.list.map((item) => {
33 | arr.push(item);
34 | })
35 | this.setState({
36 | shopData:arr,
37 | })
38 | })
39 | }else {
40 | console.log("error");
41 | }
42 | });
43 | }
44 | sc() {
45 | let el = this.refs.el;
46 | let oPg = this.state.shopPg;
47 | if(el.scrollTop + el.clientHeight >= el.scrollHeight) {
48 | if(oPg >= 3) return;
49 | let nPg = oPg + 1;
50 | this.getData(nPg);
51 | this.setState({
52 | shopPg: nPg
53 | })
54 | }
55 | }
56 | render() {
57 | let shopData = this.state.shopData;
58 | return (
59 |
60 |
61 | {this.state.category.map((item, index) => {
62 | return -
63 |
64 | {item.name}
65 |
66 | })}
67 |
68 |
精彩推荐
69 | {shopData.length !== 0 ? shopData.map((item, index) => {
70 | return
71 | }) : "" }
72 |
73 | )
74 | }
75 | }
76 |
77 | export default Shop;
--------------------------------------------------------------------------------
/src/components/shop/ShopItem.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | class ShopItem extends React.Component {
4 | render() {
5 | let product = this.props.product;
6 | return (
7 |
8 |

9 |
10 |
{product.masterName}
11 |
{product.slaveName}
12 |
¥{product.skuList[0].price/100}已售{product.displaySalesCount}
13 |
14 |
15 |
16 | );
17 | }
18 | }
19 |
20 | export default ShopItem;
--------------------------------------------------------------------------------
/src/css/app.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | export default StyleSheet.create({
4 | 'app': {
5 | 'width': [{ 'unit': '%H', 'value': 1 }],
6 | 'height': [{ 'unit': '%V', 'value': 1 }],
7 | 'display': 'flex',
8 | 'flexDirection': 'column'
9 | },
10 | 'top-bar': {
11 | 'width': [{ 'unit': '%H', 'value': 1 }],
12 | 'height': [{ 'unit': 'px', 'value': 50 }],
13 | 'background': '#282828',
14 | 'fontSize': [{ 'unit': 'px', 'value': 18 }],
15 | 'color': '#fff',
16 | 'display': 'flex',
17 | 'alignItems': 'center',
18 | 'justifyContent': 'space-between',
19 | 'zIndex': '10'
20 | },
21 | 'top-bar iconfont': {
22 | 'margin': [{ 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 20 }]
23 | },
24 | 'nav': {
25 | 'background': '#282828',
26 | 'width': [{ 'unit': '%H', 'value': 0.66 }],
27 | 'height': [{ 'unit': '%V', 'value': 1 }],
28 | 'boxSizing': 'border-box',
29 | 'position': 'fixed',
30 | 'left': [{ 'unit': 'px', 'value': 0 }],
31 | 'top': [{ 'unit': 'px', 'value': 0 }],
32 | 'zIndex': '3'
33 | },
34 | 'nav ul': {
35 | 'marginTop': [{ 'unit': 'px', 'value': 50 }]
36 | },
37 | 'nav ul li': {
38 | 'color': '#333',
39 | 'height': [{ 'unit': 'px', 'value': 50 }],
40 | 'lineHeight': [{ 'unit': 'px', 'value': 50 }],
41 | 'boxSizing': 'border-box',
42 | 'borderBottom': [{ 'unit': 'px', 'value': 1 }, { 'unit': 'string', 'value': '#333' }, { 'unit': 'string', 'value': 'solid' }],
43 | 'padding': [{ 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 10 }],
44 | 'fontSize': [{ 'unit': 'px', 'value': 14 }]
45 | },
46 | 'nav ul li a': {
47 | 'width': [{ 'unit': '%H', 'value': 1 }],
48 | 'height': [{ 'unit': '%V', 'value': 1 }],
49 | 'color': '#eee',
50 | 'display': 'flex',
51 | 'justifyContent': 'space-between'
52 | },
53 | 'home': {
54 | 'flex': '1',
55 | 'overflow': 'auto',
56 | 'background': '#ebebeb',
57 | 'paddingBottom': [{ 'unit': 'px', 'value': 30 }]
58 | },
59 | 'home #banner-container': {
60 | 'width': [{ 'unit': '%H', 'value': 1 }],
61 | 'height': [{ 'unit': 'px', 'value': 200 }],
62 | 'position': 'relative',
63 | 'overflow': 'hidden'
64 | },
65 | 'home #banner-container banner': {
66 | 'height': [{ 'unit': 'px', 'value': 200 }]
67 | },
68 | 'home #banner-container banner li': {
69 | 'float': 'left',
70 | 'position': 'relative'
71 | },
72 | 'home #banner-container banner li img': {
73 | 'width': [{ 'unit': '%H', 'value': 1 }],
74 | 'height': [{ 'unit': 'px', 'value': 200 }]
75 | },
76 | 'home now-play > a': {
77 | 'display': 'block',
78 | 'fontSize': [{ 'unit': 'px', 'value': 14 }],
79 | 'padding': [{ 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 10 }],
80 | 'border': [{ 'unit': 'px', 'value': 1 }, { 'unit': 'string', 'value': '#999' }, { 'unit': 'string', 'value': 'solid' }],
81 | 'borderRadius': '30px',
82 | 'margin': [{ 'unit': 'px', 'value': 30 }, { 'unit': 'string', 'value': 'auto' }, { 'unit': 'px', 'value': 30 }, { 'unit': 'string', 'value': 'auto' }],
83 | 'width': [{ 'unit': 'px', 'value': 130 }],
84 | 'textAlign': 'center'
85 | },
86 | 'home coming-soon > a': {
87 | 'display': 'block',
88 | 'fontSize': [{ 'unit': 'px', 'value': 14 }],
89 | 'padding': [{ 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 10 }],
90 | 'border': [{ 'unit': 'px', 'value': 1 }, { 'unit': 'string', 'value': '#999' }, { 'unit': 'string', 'value': 'solid' }],
91 | 'borderRadius': '30px',
92 | 'margin': [{ 'unit': 'px', 'value': 30 }, { 'unit': 'string', 'value': 'auto' }, { 'unit': 'px', 'value': 30 }, { 'unit': 'string', 'value': 'auto' }],
93 | 'width': [{ 'unit': 'px', 'value': 130 }],
94 | 'textAlign': 'center'
95 | },
96 | 'home line': {
97 | 'display': 'flex',
98 | 'marginBottom': [{ 'unit': 'px', 'value': 60 }]
99 | },
100 | 'home line p': {
101 | 'flex': '1',
102 | 'borderBottom': [{ 'unit': 'px', 'value': 1 }, { 'unit': 'string', 'value': '#aaa' }, { 'unit': 'string', 'value': 'solid' }]
103 | },
104 | 'home line span': {
105 | 'background': '#aaa',
106 | 'fontSize': [{ 'unit': 'px', 'value': 12 }],
107 | 'borderRadius': '2px',
108 | 'padding': [{ 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 5 }],
109 | 'marginBottom': [{ 'unit': 'px', 'value': -10 }],
110 | 'color': '#fff'
111 | },
112 | 'home-item': {
113 | 'boxSizing': 'border-box',
114 | 'margin': [{ 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 20 }],
115 | 'boxShadow': [{ 'unit': 'px', 'value': 2 }, { 'unit': 'px', 'value': 2 }, { 'unit': 'px', 'value': 4 }, { 'unit': 'string', 'value': '#666' }]
116 | },
117 | 'home-item img': {
118 | 'width': [{ 'unit': '%H', 'value': 1 }],
119 | 'height': [{ 'unit': 'px', 'value': 200 }]
120 | },
121 | 'home-item home-info': {
122 | 'background': '#fff',
123 | 'padding': [{ 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 10 }]
124 | },
125 | 'home-item home-info h1': {
126 | 'fontSize': [{ 'unit': 'px', 'value': 18 }],
127 | 'marginBottom': [{ 'unit': 'px', 'value': 5 }]
128 | },
129 | 'home-item home-info h1 span': {
130 | 'color': '#f00',
131 | 'fontSize': [{ 'unit': 'px', 'value': 20 }],
132 | 'float': 'right'
133 | },
134 | 'home-item home-info p': {
135 | 'color': '#333',
136 | 'fontSize': [{ 'unit': 'px', 'value': 14 }]
137 | },
138 | 'movie': {
139 | 'flex': '1',
140 | 'overflow': 'auto',
141 | 'background': '#ebebeb',
142 | 'padding': [{ 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 30 }, { 'unit': 'px', 'value': 20 }]
143 | },
144 | 'movie movie-tab': {
145 | 'width': [{ 'unit': '%H', 'value': 1 }],
146 | 'height': [{ 'unit': 'px', 'value': 45 }],
147 | 'borderBottom': [{ 'unit': 'px', 'value': 2 }, { 'unit': 'string', 'value': 'orange' }, { 'unit': 'string', 'value': 'solid' }],
148 | 'display': 'flex'
149 | },
150 | 'movie movie-tab a': {
151 | 'flex': '1',
152 | 'height': [{ 'unit': 'px', 'value': 45 }],
153 | 'lineHeight': [{ 'unit': 'px', 'value': 45 }],
154 | 'textAlign': 'center',
155 | 'boxSizing': 'border-box'
156 | },
157 | 'movie movie-tab aactive': {
158 | 'color': 'orange',
159 | 'borderBottom': [{ 'unit': 'px', 'value': 3 }, { 'unit': 'string', 'value': 'orange' }, { 'unit': 'string', 'value': 'solid' }]
160 | },
161 | 'movie-item': {
162 | 'padding': [{ 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 0 }],
163 | 'width': [{ 'unit': '%H', 'value': 1 }],
164 | 'borderBottom': [{ 'unit': 'px', 'value': 1 }, { 'unit': 'string', 'value': '#aaa' }, { 'unit': 'string', 'value': 'dashed' }]
165 | },
166 | 'movie-item a': {
167 | 'width': [{ 'unit': '%H', 'value': 1 }],
168 | 'display': 'flex'
169 | },
170 | 'movie-item a img': {
171 | 'width': [{ 'unit': 'px', 'value': 60 }],
172 | 'height': [{ 'unit': 'px', 'value': 82 }],
173 | 'marginRight': [{ 'unit': 'px', 'value': 10 }]
174 | },
175 | 'movie-item a movie-info': {
176 | 'height': [{ 'unit': 'px', 'value': 82 }],
177 | 'flex': '1',
178 | 'display': 'flex',
179 | 'flexDirection': 'column',
180 | 'justifyContent': 'space-between'
181 | },
182 | 'movie-item a movie-info h1': {
183 | 'fontSize': [{ 'unit': 'px', 'value': 18 }],
184 | 'marginBottom': [{ 'unit': 'px', 'value': 5 }]
185 | },
186 | 'movie-item a movie-info h1 span': {
187 | 'color': '#f00',
188 | 'fontSize': [{ 'unit': 'px', 'value': 20 }],
189 | 'float': 'right'
190 | },
191 | 'movie-item a movie-info p': {
192 | 'color': '#333',
193 | 'fontSize': [{ 'unit': 'px', 'value': 14 }]
194 | },
195 | 'cinema': {
196 | 'flex': '1',
197 | 'overflow': 'auto',
198 | 'background': '#ebebeb'
199 | },
200 | 'cinema-item': {
201 | 'padding': [{ 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }],
202 | 'background': '#fff',
203 | 'borderBottom': [{ 'unit': 'px', 'value': 1 }, { 'unit': 'string', 'value': '#aaa' }, { 'unit': 'string', 'value': 'solid' }]
204 | },
205 | 'cinema-item h1': {
206 | 'whiteSpace': 'nowrap',
207 | 'textOverflow': 'hidden',
208 | 'textOverflow': 'ellipsis'
209 | },
210 | 'cinema-item p': {
211 | 'fontSize': [{ 'unit': 'px', 'value': 12 }],
212 | 'color': '#aaa',
213 | 'lineHeight': [{ 'unit': 'px', 'value': 15 }]
214 | },
215 | 'cinema-item labels': {
216 | 'margin': [{ 'unit': 'px', 'value': 15 }, { 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 15 }, { 'unit': 'px', 'value': 0 }],
217 | 'fontSize': [{ 'unit': 'px', 'value': 12 }]
218 | },
219 | 'cinema-item labels span': {
220 | 'background': 'orange',
221 | 'color': '#fff',
222 | 'borderRadius': '3px',
223 | 'marginRight': [{ 'unit': 'px', 'value': 5 }],
224 | 'padding': [{ 'unit': 'px', 'value': 2 }, { 'unit': 'px', 'value': 4 }, { 'unit': 'px', 'value': 2 }, { 'unit': 'px', 'value': 4 }]
225 | },
226 | 'shop': {
227 | 'flex': '1',
228 | 'overflow': 'auto',
229 | 'background': '#ebebeb'
230 | },
231 | 'shop category': {
232 | 'display': 'flex',
233 | 'flexWrap': 'wrap',
234 | 'background': '#fff'
235 | },
236 | 'shop category li': {
237 | 'width': [{ 'unit': '%H', 'value': 0.25 }],
238 | 'height': [{ 'unit': 'px', 'value': 80 }],
239 | 'justifyContent': 'center',
240 | 'display': 'flex',
241 | 'flexDirection': 'column',
242 | 'alignItems': 'center'
243 | },
244 | 'shop category li img': {
245 | 'width': [{ 'unit': 'px', 'value': 40 }],
246 | 'height': [{ 'unit': 'px', 'value': 40 }]
247 | },
248 | 'shop category li p': {
249 | 'fontSize': [{ 'unit': 'px', 'value': 14 }]
250 | },
251 | 'shop > p': {
252 | 'fontSize': [{ 'unit': 'px', 'value': 14 }],
253 | 'margin': [{ 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 5 }, { 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 5 }]
254 | },
255 | 'shop-item': {
256 | 'padding': [{ 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }],
257 | 'borderBottom': [{ 'unit': 'px', 'value': 1 }, { 'unit': 'string', 'value': '#ddd' }, { 'unit': 'string', 'value': 'solid' }],
258 | 'display': 'flex',
259 | 'background': '#fff'
260 | },
261 | 'shop-item img': {
262 | 'width': [{ 'unit': 'px', 'value': 80 }],
263 | 'height': [{ 'unit': 'px', 'value': 80 }],
264 | 'marginRight': [{ 'unit': 'px', 'value': 20 }]
265 | },
266 | 'shop-item shop-info': {
267 | 'width': [{ 'unit': 'px', 'value': 230 }],
268 | 'display': 'flex',
269 | 'flexDirection': 'column',
270 | 'justifyContent': 'space-between'
271 | },
272 | 'shop-item shop-info h1': {
273 | 'fontSize': [{ 'unit': 'px', 'value': 14 }],
274 | 'whiteSpace': 'nowrap',
275 | 'overflow': 'hidden',
276 | 'textOverflow': 'ellipsis'
277 | },
278 | 'shop-item shop-info h2': {
279 | 'fontSize': [{ 'unit': 'px', 'value': 12 }],
280 | 'color': '#aaa'
281 | },
282 | 'shop-item shop-info p': {
283 | 'color': '#f00',
284 | 'fontSize': [{ 'unit': 'px', 'value': 14 }]
285 | },
286 | 'shop-item shop-info p span': {
287 | 'color': '#aaa',
288 | 'float': 'right',
289 | 'fontSize': [{ 'unit': 'px', 'value': 12 }]
290 | },
291 | 'detail': {
292 | 'flex': '1',
293 | 'overflow': 'auto',
294 | 'background': '#ebebeb'
295 | },
296 | 'detail img': {
297 | 'width': [{ 'unit': '%H', 'value': 1 }],
298 | 'height': [{ 'unit': 'px', 'value': 210 }]
299 | },
300 | 'detail info': {
301 | 'padding': [{ 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }, { 'unit': 'px', 'value': 20 }]
302 | },
303 | 'detail h1': {
304 | 'fontSize': [{ 'unit': 'px', 'value': 18 }],
305 | 'marginBottom': [{ 'unit': 'px', 'value': 20 }]
306 | },
307 | 'detail p': {
308 | 'margin': [{ 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 0 }, { 'unit': 'px', 'value': 10 }, { 'unit': 'px', 'value': 0 }],
309 | 'fontSize': [{ 'unit': 'px', 'value': 14 }],
310 | 'lineHeight': [{ 'unit': 'px', 'value': 18 }]
311 | }
312 | });
313 |
--------------------------------------------------------------------------------
/src/css/app.scss:
--------------------------------------------------------------------------------
1 | @mixin setwh($w, $h) {
2 | width: $w;
3 | height: $h;
4 | }
5 |
6 | @mixin singleMid($h) {
7 | height: $h;
8 | line-height: $h;
9 | }
10 |
11 | .app {
12 | @include setwh(100%, 100%);
13 | display: flex;
14 | flex-direction: column;
15 | }
16 |
17 | .top-bar {
18 | @include setwh(100%, 50px);
19 | background: #282828;
20 | font-size: 18px;
21 | color: #fff;
22 | display: flex;
23 | align-items: center;
24 | justify-content: space-between;
25 | z-index: 10;
26 | .iconfont {
27 | margin: 0 20px;
28 | }
29 | }
30 |
31 | .nav {
32 | background: #282828;
33 | width: 66%;
34 | height: 100%;
35 | box-sizing: border-box;
36 | position: fixed;
37 | left: 0;
38 | top: 0;
39 | z-index: 3;
40 | ul {
41 | margin-top: 50px;
42 | li {
43 | color: #333;
44 | @include singleMid(50px);
45 | box-sizing: border-box;
46 | border-bottom: 1px #333 solid;
47 | padding: 0 10px;
48 | font-size: 14px;
49 | a {
50 | width: 100%;
51 | height: 100%;
52 | color: #eee;
53 | display: flex;
54 | justify-content: space-between;
55 | }
56 | }
57 | }
58 | }
59 |
60 | .home {
61 | flex: 1;
62 | overflow: auto;
63 | background: #ebebeb;
64 | padding-bottom: 30px;
65 | #banner-container {
66 | @include setwh(100%, 200px);
67 | position: relative;
68 | overflow: hidden;
69 | .banner {
70 | height: 200px;
71 | li {
72 | float: left;
73 | position: relative;
74 | img {
75 | @include setwh(100%, 200px);
76 | }
77 | }
78 | }
79 | }
80 | .now-play,
81 | .coming-soon {
82 | &>a {
83 | display: block;
84 | font-size: 14px;
85 | padding: 5px 10px;
86 | border: 1px #999 solid;
87 | border-radius: 30px;
88 | margin: 30px auto;
89 | width: 130px;
90 | text-align: center;
91 | }
92 | }
93 | .line {
94 | display: flex;
95 | margin-bottom: 60px;
96 | p {
97 | flex: 1;
98 | border-bottom: 1px #aaa solid;
99 | }
100 | span {
101 | background: #aaa;
102 | font-size: 12px;
103 | border-radius: 2px;
104 | padding: 5px;
105 | margin-bottom: -10px;
106 | color: #fff;
107 | }
108 | }
109 | }
110 |
111 | .home-item {
112 | box-sizing: border-box;
113 | margin: 20px 20px 0;
114 | box-shadow: 2px 2px 4px #666;
115 | img {
116 | @include setwh(100%, 200px);
117 | }
118 | .home-info {
119 | background: #fff;
120 | padding: 10px;
121 | h1 {
122 | font-size: 18px;
123 | margin-bottom: 5px;
124 | span {
125 | color: #f00;
126 | font-size: 20px;
127 | float: right;
128 | }
129 | }
130 | p {
131 | color: #333;
132 | font-size: 14px;
133 | }
134 | }
135 | }
136 |
137 | .movie {
138 | flex: 1;
139 | overflow: auto;
140 | background: #ebebeb;
141 | padding: 0px 20px 30px;
142 | .movie-tab {
143 | @include setwh(100%, 45px);
144 | border-bottom: 2px orange solid;
145 | display: flex;
146 | a {
147 | flex: 1;
148 | @include singleMid(45px);
149 | text-align: center;
150 | box-sizing: border-box;
151 | &.active {
152 | color: orange;
153 | border-bottom: 3px orange solid;
154 | }
155 | }
156 | }
157 | }
158 |
159 | .movie-item {
160 | padding: 20px 0;
161 | width: 100%;
162 | border-bottom: 1px #aaa dashed;
163 | a {
164 | width: 100%;
165 | display: flex;
166 | img {
167 | @include setwh(60px, 82px);
168 | margin-right: 10px;
169 | }
170 | .movie-info {
171 | height: 82px;
172 | flex: 1;
173 | display: flex;
174 | flex-direction: column;
175 | justify-content: space-between;
176 | h1 {
177 | font-size: 18px;
178 | margin-bottom: 5px;
179 | span {
180 | color: #f00;
181 | font-size: 20px;
182 | float: right;
183 | }
184 | }
185 | p {
186 | color: #333;
187 | font-size: 14px;
188 | }
189 | }
190 | }
191 | }
192 |
193 | .cinema {
194 | flex: 1;
195 | overflow: auto;
196 | background: #ebebeb;
197 | }
198 |
199 | .cinema-item {
200 | padding: 20px;
201 | background: #fff;
202 | border-bottom: 1px #aaa solid;
203 | h1 {
204 | white-space: nowrap;
205 | text-overflow: hidden;
206 | text-overflow: ellipsis;
207 | }
208 | p {
209 | font-size: 12px;
210 | color: #aaa;
211 | line-height: 15px;
212 | }
213 | .labels {
214 | margin: 15px 0;
215 | font-size: 12px;
216 | span {
217 | background: orange;
218 | color: #fff;
219 | border-radius: 3px;
220 | margin-right: 5px;
221 | padding: 2px 4px;
222 | }
223 | }
224 | }
225 |
226 | .shop {
227 | flex: 1;
228 | overflow: auto;
229 | background: #ebebeb;
230 | .category {
231 | display: flex;
232 | flex-wrap: wrap;
233 | background: #fff;
234 | li {
235 | width: 25%;
236 | height: 80px;
237 | justify-content: center;
238 | display: flex;
239 | flex-direction: column;
240 | align-items: center;
241 | img {
242 | @include setwh(40px, 40px);
243 | }
244 | p {
245 | font-size: 14px;
246 | }
247 | }
248 | }
249 | &>p {
250 | font-size: 14px;
251 | margin: 10px 5px;
252 | }
253 | }
254 |
255 | .shop-item {
256 | padding: 20px;
257 | border-bottom: 1px #ddd solid;
258 | display: flex;
259 | background: #fff;
260 | img {
261 | @include setwh(80px, 80px);
262 | margin-right: 20px;
263 | }
264 | .shop-info {
265 | width: 230px;
266 | display: flex;
267 | flex-direction: column;
268 | justify-content: space-between;
269 | h1 {
270 | font-size: 14px;
271 | white-space: nowrap;
272 | overflow: hidden;
273 | text-overflow: ellipsis;
274 | }
275 | h2 {
276 | font-size: 12px;
277 | color: #aaa;
278 | }
279 | p {
280 | color: #f00;
281 | font-size: 14px;
282 | span {
283 | color: #aaa;
284 | float: right;
285 | font-size: 12px;
286 | }
287 | }
288 | }
289 | }
290 |
291 | .detail {
292 | flex: 1;
293 | overflow: auto;
294 | background: #ebebeb;
295 | img {
296 | @include setwh(100%, 210px);
297 | }
298 | .info {
299 | padding: 20px 20px;
300 | }
301 | h1 {
302 | font-size: 18px;
303 | margin-bottom: 20px;
304 | }
305 | p {
306 | margin: 10px 0;
307 | font-size: 14px;
308 | line-height: 18px;
309 | }
310 | }
--------------------------------------------------------------------------------
/src/css/reset.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
3 | * http://cssreset.com
4 | */
5 | html, body, div, span, applet, object, iframe,
6 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
7 | a, abbr, acronym, address, big, cite, code,
8 | del, dfn, em, img, ins, kbd, q, s, samp,
9 | small, strike, strong, sub, sup, tt, var,
10 | b, u, i, center,
11 | dl, dt, dd, ol, ul, li,
12 | fieldset, form, label, legend,
13 | table, caption, tbody, tfoot, thead, tr, th, td,
14 | article, aside, canvas, details, embed,
15 | figure, figcaption, footer, header,
16 | menu, nav, output, ruby, section, summary,
17 | time, mark, audio, video, input {
18 | margin: 0;
19 | padding: 0;
20 | border: 0;
21 | font-size: 100%;
22 | font-weight: normal;
23 | vertical-align: baseline;
24 | }
25 |
26 | /* HTML5 display-role reset for older browsers */
27 | article, aside, details, figcaption, figure,
28 | footer, header, menu, nav, section {
29 | display: block;
30 | }
31 |
32 | body {
33 | line-height: 1;
34 | }
35 |
36 | blockquote, q {
37 | quotes: none;
38 | }
39 |
40 | blockquote:before, blockquote:after,
41 | q:before, q:after {
42 | content: none;
43 | }
44 |
45 | table {
46 | border-collapse: collapse;
47 | border-spacing: 0;
48 | }
49 |
50 | /* custom */
51 | a {
52 | color: #000;
53 | text-decoration: none;
54 | -webkit-backface-visibility: hidden;
55 | }
56 |
57 | li {
58 | list-style: none;
59 | }
60 |
61 |
62 | ::-webkit-scrollbar {
63 | display: none;
64 | }
65 |
66 | html, body {
67 | width: 100%;
68 | height: 100%;
69 | }
70 |
71 | #app {
72 | width: 100%;
73 | height: 100%;
74 | }
75 |
76 | body {
77 | -webkit-text-size-adjust: none;
78 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
79 | }
80 |
81 | fix:after {
82 | content: " ";
83 | height: 0;
84 | font-size: 0;
85 | clear: both;
86 | display: block;
87 | }
--------------------------------------------------------------------------------
/src/data/banner.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "billboards": [
5 | {
6 | "id": 648,
7 | "name": "5.1抢影票",
8 | "url": "http://m.maizuo.com/act/active/1154",
9 | "imageUrl": "https://pic.maizuo.com/h5PicUpload/a8df6800dee20943e7ee629fc4c2c18d.jpg",
10 | "weight": 2
11 | },
12 | {
13 | "id": 649,
14 | "name": "X幻想 岛国奇片",
15 | "url": "http://cps.maizuo.com/changeUrl.htm?channelId=372&urlId=1501",
16 | "imageUrl": "https://pic.maizuo.com/h5PicUpload/4cde9c244f685148f7e839585fd57f5e.jpg",
17 | "weight": 9
18 | },
19 | {
20 | "id": 650,
21 | "name": "熊本熊正版周边",
22 | "url": "http://m.maizuo.com/act/active/1160",
23 | "imageUrl": "https://pic.maizuo.com/h5PicUpload/9dc9fce2dfe9a207744e1b4c406d7df7.jpg",
24 | "weight": 1
25 | },
26 | {
27 | "id": 651,
28 | "name": "2017[如果]田馥甄巡回演唱会PLUS",
29 | "url": "http://m.maizuo.com/act/active/1135",
30 | "imageUrl": "https://pic.maizuo.com/h5PicUpload/c891d3346ecbda99a3370ae5b34026a1.jpg",
31 | "weight": 1
32 | },
33 | {
34 | "id": 655,
35 | "name": "春娇救志明",
36 | "url": "http://m.maizuo.com/act/active/1151",
37 | "imageUrl": "https://pic.maizuo.com/h5PicUpload/800476b18771136fd7e2944477e85b08.jpg",
38 | "weight": 2
39 | }
40 | ]
41 | },
42 | "msg": "ok"
43 | }
--------------------------------------------------------------------------------
/src/data/coming-soon-1.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "films": [{
5 | "id": 3647,
6 | "name": "银河护卫队2",
7 | "cover": {
8 | "origin": "https://pic.maizuo.com/usr/movie/bb468eeee509991ff8eb585c6897f0c5.jpg"
9 | },
10 | "poster": {
11 | "origin": "https://pic.maizuo.com/usr/movie/7e6e6d01c4a22643dae2b1777cab524b.jpg",
12 | "thumbnail": "https://pic.maizuo.com/usr/movie/7e6e6d01c4a22643dae2b1777cab524b.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
13 | },
14 | "intro": "星爵身世迷 终于见爹地",
15 | "premiereAt": 1493913600000,
16 | "grade": "8.5",
17 | "watchCount": 21237,
18 | "cinemaCount": 0,
19 | "scheduleCount": 0,
20 | "isPromotion": true,
21 | "isNowPlaying": "",
22 | "isComingSoon": true,
23 | "isPresold": ""
24 | }, {
25 | "id": 3663,
26 | "name": "摔跤吧!爸爸",
27 | "cover": {
28 | "origin": "https://pic.maizuo.com/usr/movie/50fee00488817e1acda5fad62ef66456.jpg"
29 | },
30 | "poster": {
31 | "origin": "https://pic.maizuo.com/usr/movie/0478e393c2b69bd4b97666854af44263.jpg",
32 | "thumbnail": "https://pic.maizuo.com/usr/movie/0478e393c2b69bd4b97666854af44263.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
33 | },
34 | "intro": "为圆摔跤梦 女儿不心疼",
35 | "premiereAt": 1493913600000,
36 | "grade": "9.5",
37 | "watchCount": 2911,
38 | "cinemaCount": 0,
39 | "scheduleCount": 0,
40 | "isPromotion": true,
41 | "isNowPlaying": "",
42 | "isComingSoon": true,
43 | "isPresold": ""
44 | }, {
45 | "id": 3488,
46 | "name": "咸鱼传奇",
47 | "cover": {
48 | "origin": "https://pic.maizuo.com/usr/100003488/2a84229ae00707143b6a55bf4b201eea.jpg"
49 | },
50 | "poster": {
51 | "origin": "https://pic.maizuo.com/usr/100003488/1bb2435fbef875786c2b1397d533f8a8.jpg",
52 | "thumbnail": "https://pic.maizuo.com/usr/100003488/1bb2435fbef875786c2b1397d533f8a8.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
53 | },
54 | "intro": "咸鱼也有梦 跨越千年追",
55 | "premiereAt": 1493913600000,
56 | "grade": "8.0",
57 | "watchCount": 348,
58 | "cinemaCount": 0,
59 | "scheduleCount": 0,
60 | "isPromotion": false,
61 | "isNowPlaying": "",
62 | "isComingSoon": true,
63 | "isPresold": ""
64 | }, {
65 | "id": 3648,
66 | "name": "海阔天空",
67 | "cover": {
68 | "origin": "https://pic.maizuo.com/usr/movie/5e7b5238bb39ec2328d7aeb16cec0898.jpg"
69 | },
70 | "poster": {
71 | "origin": "https://pic.maizuo.com/usr/movie/e01fded12252b763676ab0bf40b267fa.jpg",
72 | "thumbnail": "https://pic.maizuo.com/usr/movie/e01fded12252b763676ab0bf40b267fa.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
73 | },
74 | "intro": "",
75 | "premiereAt": 1493913600000,
76 | "grade": "8.0",
77 | "watchCount": 0,
78 | "cinemaCount": 0,
79 | "scheduleCount": 0,
80 | "isPromotion": false,
81 | "isNowPlaying": "",
82 | "isComingSoon": true,
83 | "isPresold": ""
84 | }, {
85 | "id": 3672,
86 | "name": "黑白照相馆",
87 | "cover": {
88 | "origin": "https://pic.maizuo.com/usr/movie/12e89451f7b20677cff235a39dd7d255.jpg"
89 | },
90 | "poster": {
91 | "origin": "https://pic.maizuo.com/usr/movie/881e3465b398834feab9b69f35f045cf.jpg",
92 | "thumbnail": "https://pic.maizuo.com/usr/movie/881e3465b398834feab9b69f35f045cf.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
93 | },
94 | "intro": "神秘照相馆 空间会逆变",
95 | "premiereAt": 1493913600000,
96 | "grade": "8.0",
97 | "watchCount": 0,
98 | "cinemaCount": 0,
99 | "scheduleCount": 0,
100 | "isPromotion": false,
101 | "isNowPlaying": "",
102 | "isComingSoon": true,
103 | "isPresold": ""
104 | }, {
105 | "id": 3674,
106 | "name": "凤凰街风雨",
107 | "cover": {
108 | "origin": "https://pic.maizuo.com/usr/movie/a6bb5693b62af9eb304be6ccc1153746.jpg"
109 | },
110 | "poster": {
111 | "origin": "https://pic.maizuo.com/usr/movie/0e26ceb2e45f236343e14ef51f715da2.jpg",
112 | "thumbnail": "https://pic.maizuo.com/usr/movie/0e26ceb2e45f236343e14ef51f715da2.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
113 | },
114 | "intro": "",
115 | "premiereAt": 1494259200000,
116 | "grade": "8.0",
117 | "watchCount": 0,
118 | "cinemaCount": 0,
119 | "scheduleCount": 0,
120 | "isPromotion": false,
121 | "isNowPlaying": "",
122 | "isComingSoon": true,
123 | "isPresold": ""
124 | }, {
125 | "id": 3532,
126 | "name": "麻烦家族",
127 | "cover": {
128 | "origin": "https://pic.maizuo.com/usr/100003532/8655df340ae54e9471f10356c9ddc765.jpg"
129 | },
130 | "poster": {
131 | "origin": "https://pic.maizuo.com/usr/movie/a5cac98679a3903768f69a6996881ffb.jpg",
132 | "thumbnail": "https://pic.maizuo.com/usr/movie/a5cac98679a3903768f69a6996881ffb.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
133 | },
134 | "intro": "晚年大危机 生日要分离",
135 | "premiereAt": 1494432000000,
136 | "grade": "8.0",
137 | "watchCount": 0,
138 | "cinemaCount": 0,
139 | "scheduleCount": 0,
140 | "isPromotion": false,
141 | "isNowPlaying": "",
142 | "isComingSoon": true,
143 | "isPresold": ""
144 | }],
145 | "page": {
146 | "total": 14,
147 | "current": 1
148 | }
149 | },
150 | "msg": "ok"
151 | }
--------------------------------------------------------------------------------
/src/data/coming-soon-2.json:
--------------------------------------------------------------------------------
1 | {"status":0,"data":{"films":[{"id":3659,"name":"六人晚餐","cover":{"origin":"https://pic.maizuo.com/usr/movie/4bf3b352fd60d3eb3b40e42b36875d85.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/df8c81bde180b08474de6b2abbfea03e.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/df8c81bde180b08474de6b2abbfea03e.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"刺痛青春 向爱而生","premiereAt":1494432000000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3565,"name":"碟仙前传","cover":{"origin":"https://pic.maizuo.com/usr/100003565/ed2a2302842e7cdaf1e0437ffc43843f.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/cd0c50a9ba38808a921ffd9e23a4606b.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/cd0c50a9ba38808a921ffd9e23a4606b.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"不作不会死 远离碟仙戏","premiereAt":1494518400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3603,"name":"诡宅","cover":{"origin":"https://pic.maizuo.com/usr/100003603/b18a4e450222dcd75b5a7090b0980410.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003603/d0ca107873fffaaeb161ce019be377bd.jpg","thumbnail":"https://pic.maizuo.com/usr/100003603/d0ca107873fffaaeb161ce019be377bd.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"乡下去养胎 不料入鬼宅","premiereAt":1494518400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3622,"name":"提着心,吊着胆","cover":{"origin":"https://pic.maizuo.com/usr/movie/63607d8e5b8a14aaf1d0a6c048894934.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/600bae63775dfc9792ae3c341d367aa5.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/600bae63775dfc9792ae3c341d367aa5.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"疑妻在出轨 犯下杀手罪","premiereAt":1494518400000,"grade":"7.5","watchCount":57,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3649,"name":"亚瑟王:斗兽争霸","cover":{"origin":"https://pic.maizuo.com/usr/movie/c0c70db2a95f929863720f03c6b7ec1b.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/08feeebc46a6b81bf57ee1e348147ebc.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/08feeebc46a6b81bf57ee1e348147ebc.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"从一无所有 到圣剑在手","premiereAt":1494518400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3652,"name":"超凡战队(原《恐龙战队》)","cover":{"origin":"https://pic.maizuo.com/usr/movie/addb0a27c06216fc3984b4b21572c849.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/3915cc3aa36a24ceda5b00be4be9de66.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/3915cc3aa36a24ceda5b00be4be9de66.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"少年齐合体 打击恶势力","premiereAt":1494518400000,"grade":"8.0","watchCount":74,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3658,"name":"借眼","cover":{"origin":"https://pic.maizuo.com/usr/movie/c18b8a7cf8e4a27fd5d3773b31907bc8.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/9b5bba348204ad699d8446d31c0264a1.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/9b5bba348204ad699d8446d31c0264a1.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"终于见光明 却被恶鬼缠","premiereAt":1494518400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""}],"page":{"total":14,"current":2}},"msg":"ok"}
--------------------------------------------------------------------------------
/src/data/coming-soon-3.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "films": [{
5 | "id": 3660,
6 | "name": "毒。诫",
7 | "cover": {
8 | "origin": "https://pic.maizuo.com/usr/movie/9fb5c35da890168dc938917a4835ba10.jpg"
9 | },
10 | "poster": {
11 | "origin": "https://pic.maizuo.com/usr/movie/9f2f3f6bc3c1103c210405be1c69db73.jpg",
12 | "thumbnail": "https://pic.maizuo.com/usr/movie/9f2f3f6bc3c1103c210405be1c69db73.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
13 | },
14 | "intro": "慈云山太保 古惑仔老炮",
15 | "premiereAt": 1494518400000,
16 | "grade": "8.0",
17 | "watchCount": 0,
18 | "cinemaCount": 0,
19 | "scheduleCount": 0,
20 | "isPromotion": false,
21 | "isNowPlaying": "",
22 | "isComingSoon": true,
23 | "isPresold": ""
24 | }, {
25 | "id": 3673,
26 | "name": "宝贝,再爱我一次",
27 | "cover": {
28 | "origin": "https://pic.maizuo.com/usr/movie/d652b8cab6a8e5683e3ed58b111f15c0.jpg"
29 | },
30 | "poster": {
31 | "origin": "https://pic.maizuo.com/usr/movie/582d08c554cc516d8b52200f3a28783c.jpg",
32 | "thumbnail": "https://pic.maizuo.com/usr/movie/582d08c554cc516d8b52200f3a28783c.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
33 | },
34 | "intro": "一个母亲,今生最深的渴慕",
35 | "premiereAt": 1494604800000,
36 | "grade": "8.0",
37 | "watchCount": 0,
38 | "cinemaCount": 0,
39 | "scheduleCount": 0,
40 | "isPromotion": false,
41 | "isNowPlaying": "",
42 | "isComingSoon": true,
43 | "isPresold": ""
44 | }, {
45 | "id": 3564,
46 | "name": "美容针",
47 | "cover": {
48 | "origin": "https://pic.maizuo.com/usr/100003564/4cd9cae9c49a6f86276f6c0bd47603c9.jpg"
49 | },
50 | "poster": {
51 | "origin": "https://pic.maizuo.com/usr/100003564/df5249965e4e71be759cc5efe512c94d.jpg",
52 | "thumbnail": "https://pic.maizuo.com/usr/100003564/df5249965e4e71be759cc5efe512c94d.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
53 | },
54 | "intro": "熟女遇男孩 春天重再来",
55 | "premiereAt": 1495123200000,
56 | "grade": "8.0",
57 | "watchCount": 0,
58 | "cinemaCount": 0,
59 | "scheduleCount": 0,
60 | "isPromotion": false,
61 | "isNowPlaying": "",
62 | "isComingSoon": true,
63 | "isPresold": ""
64 | }, {
65 | "id": 3589,
66 | "name": "碟仙实录",
67 | "cover": {
68 | "origin": "https://pic.maizuo.com/usr/100003589/bf2eeb3906b9c046fc2f8dc25abae084.jpg"
69 | },
70 | "poster": {
71 | "origin": "https://pic.maizuo.com/usr/100003589/40e2574b70442e7fb0753ad92006066d.jpg",
72 | "thumbnail": "https://pic.maizuo.com/usr/100003589/40e2574b70442e7fb0753ad92006066d.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
73 | },
74 | "intro": "千年厉鬼出 古宅成鬼屋",
75 | "premiereAt": 1495123200000,
76 | "grade": "8.0",
77 | "watchCount": 0,
78 | "cinemaCount": 0,
79 | "scheduleCount": 0,
80 | "isPromotion": false,
81 | "isNowPlaying": "",
82 | "isComingSoon": true,
83 | "isPresold": ""
84 | }, {
85 | "id": 3651,
86 | "name": "不期而遇",
87 | "cover": {
88 | "origin": "https://pic.maizuo.com/usr/movie/530d39626ca9a49dae8a9397bc820dfd.jpg"
89 | },
90 | "poster": {
91 | "origin": "https://pic.maizuo.com/usr/movie/df15b3e236f996c13452bce8e1a8cfb8.jpg",
92 | "thumbnail": "https://pic.maizuo.com/usr/movie/df15b3e236f996c13452bce8e1a8cfb8.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
93 | },
94 | "intro": "冤家路太窄 越吵越相爱",
95 | "premiereAt": 1495123200000,
96 | "grade": "8.0",
97 | "watchCount": 0,
98 | "cinemaCount": 0,
99 | "scheduleCount": 0,
100 | "isPromotion": false,
101 | "isNowPlaying": "",
102 | "isComingSoon": true,
103 | "isPresold": ""
104 | }, {
105 | "id": 3653,
106 | "name": "抢红",
107 | "cover": {
108 | "origin": "https://pic.maizuo.com/usr/movie/8ba9602b60ed30cff46a5133f7a1d6fa.jpg"
109 | },
110 | "poster": {
111 | "origin": "https://pic.maizuo.com/usr/movie/f2679971479dc4dc015b65d3e007f7d9.jpg",
112 | "thumbnail": "https://pic.maizuo.com/usr/movie/f2679971479dc4dc015b65d3e007f7d9.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
113 | },
114 | "intro": "利诱陷困局 是酒还是局",
115 | "premiereAt": 1495123200000,
116 | "grade": "8.0",
117 | "watchCount": 0,
118 | "cinemaCount": 0,
119 | "scheduleCount": 0,
120 | "isPromotion": false,
121 | "isNowPlaying": "",
122 | "isComingSoon": true,
123 | "isPresold": ""
124 | }, {
125 | "id": 3662,
126 | "name": "小情书",
127 | "cover": {
128 | "origin": "https://pic.maizuo.com/usr/movie/f9de8f3cc14a70e804405b274e4414e6.jpg"
129 | },
130 | "poster": {
131 | "origin": "https://pic.maizuo.com/usr/movie/ffa96e8c0495c085b03514eff1a23538.jpg",
132 | "thumbnail": "https://pic.maizuo.com/usr/movie/ffa96e8c0495c085b03514eff1a23538.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
133 | },
134 | "intro": "情书闹乌龙 纸清情意重",
135 | "premiereAt": 1495123200000,
136 | "grade": "8.0",
137 | "watchCount": 0,
138 | "cinemaCount": 0,
139 | "scheduleCount": 0,
140 | "isPromotion": false,
141 | "isNowPlaying": "",
142 | "isComingSoon": true,
143 | "isPresold": ""
144 | }],
145 | "page": {
146 | "total": 14,
147 | "current": 3
148 | }
149 | },
150 | "msg": "ok"
151 | }
--------------------------------------------------------------------------------
/src/data/coming-soon-4.json:
--------------------------------------------------------------------------------
1 | {"status":0,"data":{"films":[{"id":3675,"name":"异星觉醒","cover":{"origin":"https://pic.maizuo.com/usr/movie/eeceda1dd2c3174a223991c0bbd01473.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/713f4a7bdbffb47477cc74a614e3d697.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/713f4a7bdbffb47477cc74a614e3d697.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"宇宙外来物 样本来揭秘","premiereAt":1495123200000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3528,"name":"爱情邮局","cover":{"origin":"https://pic.maizuo.com/usr/100003528/529964d89f0bb678be2076e2437bfb85.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/2927cd84961523f0ac57dae13a328e5e.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/2927cd84961523f0ac57dae13a328e5e.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"神秘老板娘 掀情感巨浪","premiereAt":1495209600000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3560,"name":"放学后","cover":{"origin":"https://pic.maizuo.com/usr/100003560/6e89732293b6dd7867b0d91ba052ee08.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/aba90cb64f34c870bbec04bd33bc0f76.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/aba90cb64f34c870bbec04bd33bc0f76.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"校园暴力案 放学后惊现","premiereAt":1495209600000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3582,"name":"恐怖电影院2","cover":{"origin":"https://pic.maizuo.com/usr/100003582/ff19116062df8177aba76daba07fe21c.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003582/44a5795e9e49216d167db6ee533ad825.jpg","thumbnail":"https://pic.maizuo.com/usr/100003582/44a5795e9e49216d167db6ee533ad825.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"怨魂电影院 谁来大冒险","premiereAt":1495728000000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3641,"name":"中国推销员","cover":{"origin":"https://pic.maizuo.com/usr/movie/4a5382de6ffdd97c7ea20884efcafd6c.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/6b15c08519bbeb6c069e90cbe44f0732.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/6b15c08519bbeb6c069e90cbe44f0732.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"码农技术猿 爱拼才会赢","premiereAt":1495728000000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3664,"name":"加勒比海盗5:死无对证","cover":{"origin":"https://pic.maizuo.com/usr/movie/d0094473056fec9ba2796be10ac1eb1c.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/652044dc15e794669a11cafc6a609819.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/652044dc15e794669a11cafc6a609819.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"三次大改档 船长又出航","premiereAt":1495728000000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":2727,"name":"临时演员","cover":{"origin":"https://pic.maizuo.com/usr/100002727/679bcd31079b052b5e4ead23e7643d80.tmp"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/42348af339822eddff738faa19f96943.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/42348af339822eddff738faa19f96943.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"狗仔太难敌 逢场作个戏","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""}],"page":{"total":14,"current":4}},"msg":"ok"}
--------------------------------------------------------------------------------
/src/data/coming-soon-5.json:
--------------------------------------------------------------------------------
1 | {"status":0,"data":{"films":[{"id":3037,"name":"美好的意外","cover":{"origin":"https://pic.maizuo.com/usr/100003037/dd52ab3d52c9dad7348f8ca375e389ab.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/114505b4b847a3b3fd1980c363af4f2f.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/114505b4b847a3b3fd1980c363af4f2f.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"人生有假如 陈坤变主夫","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3077,"name":"夏天十九岁的肖像","cover":{"origin":"https://pic.maizuo.com/usr/movie/f78a4d230832abb2db4de463cab5c61d.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/96d77cc6653147996596d73eb7fb6ead.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/96d77cc6653147996596d73eb7fb6ead.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"恋上杀人女 子滔陷迷局","premiereAt":1495814400000,"grade":"8.4","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3654,"name":"荡寇风云","cover":{"origin":"https://pic.maizuo.com/usr/movie/fc871e587cc62b12b6c1d9f088d84bc6.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/0d8f9bfd7aadc7f22046a6ddfe48ba26.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/0d8f9bfd7aadc7f22046a6ddfe48ba26.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"战神戚继光 海战谁更强","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3665,"name":"“吃吃”的爱","cover":{"origin":"https://pic.maizuo.com/usr/movie/b28a38b63e00304adff2812cc144bbfd.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/e395d307bca6013afa0723667bb40452.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/e395d307bca6013afa0723667bb40452.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"打工女明星 酒店把情定","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3666,"name":"三只小猪2","cover":{"origin":"https://pic.maizuo.com/usr/movie/6bdf0f655f2085b6d5cefa52544b1acc.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/8ac85b3f073a3e3a561973e1239f57e6.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/8ac85b3f073a3e3a561973e1239f57e6.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"小猪学功夫 跟怪狼比武","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3596,"name":"小茜当家","cover":{"origin":"https://pic.maizuo.com/usr/100003596/86545235a727162f8ed85ebc7709a882.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003596/322a4399a0ed3a9a4f1af99d6c0e0526.jpg","thumbnail":"https://pic.maizuo.com/usr/100003596/322a4399a0ed3a9a4f1af99d6c0e0526.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"真实的故事为蓝本","premiereAt":1495900800000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3485,"name":"悟空圣诞奇遇记","cover":{"origin":"https://pic.maizuo.com/usr/100003485/25987457042163eb9c45717c42557b83.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003485/3142d62674078e5c187eedd2cca9cfea.jpg","thumbnail":"https://pic.maizuo.com/usr/100003485/3142d62674078e5c187eedd2cca9cfea.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"世间若无你 要着铁棒有何用","premiereAt":1496073600000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""}],"page":{"total":14,"current":5}},"msg":"ok"}
--------------------------------------------------------------------------------
/src/data/coming-soon.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "films": [{
5 | "id": 3656,
6 | "name": "灵狼传奇",
7 | "cover": {
8 | "origin": "https://pic.maizuo.com/usr/movie/e79328680d1e70be5cf6af156d0426a2.jpg"
9 | },
10 | "poster": {
11 | "origin": "https://pic.maizuo.com/usr/movie/5bace3b8c3bf5a8bb6c34b96a81046cb.jpg",
12 | "thumbnail": "https://pic.maizuo.com/usr/movie/5bace3b8c3bf5a8bb6c34b96a81046cb.jpg!150x0"
13 | },
14 | "intro": "大山坏猴王 白狼保村庄",
15 | "premiereAt": 1493395200000,
16 | "grade": "8.0",
17 | "watchCount": 333,
18 | "cinemaCount": 0,
19 | "scheduleCount": 0,
20 | "isPromotion": false,
21 | "isNowPlaying": "",
22 | "isComingSoon": true,
23 | "isPresold": ""
24 | }, {
25 | "id": 3488,
26 | "name": "咸鱼传奇",
27 | "cover": {
28 | "origin": "https://pic.maizuo.com/usr/100003488/2a84229ae00707143b6a55bf4b201eea.jpg"
29 | },
30 | "poster": {
31 | "origin": "https://pic.maizuo.com/usr/100003488/1bb2435fbef875786c2b1397d533f8a8.jpg",
32 | "thumbnail": "https://pic.maizuo.com/usr/100003488/1bb2435fbef875786c2b1397d533f8a8.jpg!150x0"
33 | },
34 | "intro": "咸鱼也有梦 跨越千年追",
35 | "premiereAt": 1493913600000,
36 | "grade": "8.0",
37 | "watchCount": 0,
38 | "cinemaCount": 0,
39 | "scheduleCount": 0,
40 | "isPromotion": false,
41 | "isNowPlaying": "",
42 | "isComingSoon": true,
43 | "isPresold": ""
44 | }, {
45 | "id": 3647,
46 | "name": "银河护卫队2",
47 | "cover": {
48 | "origin": "https://pic.maizuo.com/usr/movie/bb468eeee509991ff8eb585c6897f0c5.jpg"
49 | },
50 | "poster": {
51 | "origin": "https://pic.maizuo.com/usr/movie/7e6e6d01c4a22643dae2b1777cab524b.jpg",
52 | "thumbnail": "https://pic.maizuo.com/usr/movie/7e6e6d01c4a22643dae2b1777cab524b.jpg!150x0"
53 | },
54 | "intro": "星爵身世迷 终于见爹地",
55 | "premiereAt": 1493913600000,
56 | "grade": "8.5",
57 | "watchCount": 3234,
58 | "cinemaCount": 0,
59 | "scheduleCount": 0,
60 | "isPromotion": false,
61 | "isNowPlaying": "",
62 | "isComingSoon": true,
63 | "isPresold": ""
64 | }],
65 | "page": {
66 | "total": 32,
67 | "current": 1
68 | }
69 | },
70 | "msg": "ok"
71 | }
--------------------------------------------------------------------------------
/src/data/detail.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "film": {
5 | "id": 3590,
6 | "name": "拆弹专家",
7 | "imageryType": "1",
8 | "cover": {
9 | "origin": "https://pic.maizuo.com/usr/movie/d16085506bf738e6f2763b4d8d5f6cce.jpg"
10 | },
11 | "poster": {
12 | "origin": "https://pic.maizuo.com/usr/movie/3d915dcc28097d3f30a388cdc7099920.jpg"
13 | },
14 | "intro": "爆炸袭击案 拆弹反恐难",
15 | "synopsis": " 最新警匪动作电影《拆弹专家》(Shock Wave)将于4月份开拍,刘德华担任制作人和主演,由寰宇公司、博纳影业和刘德华的新公司梦造者联合制作,邱礼涛担任导演,投资2300万美元。片中刘德华将饰演一名卧底,追缉炸弹狂徒。预计将在2017年中期上映。之前该片曾曝出的阵容为张家辉、谢霆锋(反派)、张智霖。",
16 | "premiereAt": 1493308800000,
17 | "mins": 120,
18 | "language": "普通话、粤语",
19 | "director": "邱礼涛",
20 | "actors": [{
21 | "name": "刘德华"
22 | }, {
23 | "name": "姜武"
24 | }, {
25 | "name": "宋佳"
26 | }],
27 | "photos": [{
28 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/5f325da5705e8c361eda80a8a4c99147.jpg",
29 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/5f325da5705e8c361eda80a8a4c99147.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
30 | }, {
31 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/74e39ec69deaf517cca7abad31122602.jpg",
32 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/74e39ec69deaf517cca7abad31122602.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
33 | }, {
34 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/62c823d9e1ceaaf4b6bdb4eee2c3027c.jpg",
35 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/62c823d9e1ceaaf4b6bdb4eee2c3027c.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
36 | }, {
37 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/0fc48d8d7c5b2ffb73d28618cebc26c6.jpg",
38 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/0fc48d8d7c5b2ffb73d28618cebc26c6.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
39 | }, {
40 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/2a1e410bdfdcb0f828501ac12f80811f.jpg",
41 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/2a1e410bdfdcb0f828501ac12f80811f.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
42 | }, {
43 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/9602d7f87c9a9f2d52befb49979f0621.jpg",
44 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/9602d7f87c9a9f2d52befb49979f0621.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
45 | }, {
46 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/ec3da4fc35a0c09fd219567515f0a01e.jpg",
47 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/ec3da4fc35a0c09fd219567515f0a01e.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
48 | }, {
49 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/7acee706970306ee4d95e3f190f22689.jpg",
50 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/7acee706970306ee4d95e3f190f22689.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
51 | }, {
52 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/c58387343b04459bbbbae965f54358e4.jpg",
53 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/c58387343b04459bbbbae965f54358e4.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
54 | }, {
55 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/66badbea7e0dee6b8ec8620136790783.jpg",
56 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/66badbea7e0dee6b8ec8620136790783.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
57 | }, {
58 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/c7b125093245f006d7e6c134eab97adb.jpg",
59 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/c7b125093245f006d7e6c134eab97adb.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
60 | }, {
61 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/f72e363682e41e1a06b83f6768e43e29.jpg",
62 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/f72e363682e41e1a06b83f6768e43e29.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
63 | }, {
64 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/5a98d62581a9202fbce11b9f2f0c6b1d.jpg",
65 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/5a98d62581a9202fbce11b9f2f0c6b1d.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
66 | }, {
67 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/4ba7ecd7d70fd635bd4b264549cab642.jpg",
68 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/4ba7ecd7d70fd635bd4b264549cab642.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
69 | }, {
70 | "bigPictureAddress": "https://pic.maizuo.com/usr/100003590/3476074af271d4400c3df9d1556ec769.jpg",
71 | "pictureAddress": "https://pic.maizuo.com/usr/100003590/3476074af271d4400c3df9d1556ec769.jpg?x-oss-process=image/resize,m_fixed,h_0,w_300"
72 | }],
73 | "nation": "香港",
74 | "category": "动作|悬疑|犯罪",
75 | "trailer": {
76 | "youkuId": "XMjY1MjMwODE5Ng=="
77 | },
78 | "labelType": "0",
79 | "grade": "8.5",
80 | "party": {
81 | "likeCount": 149,
82 | "dislikeCount": 5
83 | },
84 | "cinemaCount": 125,
85 | "scheduleCount": 0,
86 | "actives": [],
87 | "isPromotion": true,
88 | "isNowPlaying": true,
89 | "isComingSoon": "",
90 | "isPresold": "",
91 | "isLike": true
92 | }
93 | },
94 | "msg": "ok"
95 | }
--------------------------------------------------------------------------------
/src/data/now-playing-1.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "films": [{
5 | "id": 3590,
6 | "name": "拆弹专家",
7 | "cover": {
8 | "origin": "https://pic.maizuo.com/usr/movie/d16085506bf738e6f2763b4d8d5f6cce.jpg"
9 | },
10 | "poster": {
11 | "origin": "https://pic.maizuo.com/usr/movie/3d915dcc28097d3f30a388cdc7099920.jpg",
12 | "thumbnail": "https://pic.maizuo.com/usr/movie/3d915dcc28097d3f30a388cdc7099920.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
13 | },
14 | "intro": "爆炸袭击案 拆弹反恐难",
15 | "premiereAt": 1493308800000,
16 | "grade": "8.5",
17 | "watchCount": 480689,
18 | "cinemaCount": 125,
19 | "scheduleCount": 1688,
20 | "isPromotion": true,
21 | "isNowPlaying": true,
22 | "isComingSoon": "",
23 | "isPresold": ""
24 | }, {
25 | "id": 3647,
26 | "name": "银河护卫队2",
27 | "cover": {
28 | "origin": "https://pic.maizuo.com/usr/movie/bb468eeee509991ff8eb585c6897f0c5.jpg"
29 | },
30 | "poster": {
31 | "origin": "https://pic.maizuo.com/usr/movie/7e6e6d01c4a22643dae2b1777cab524b.jpg",
32 | "thumbnail": "https://pic.maizuo.com/usr/movie/7e6e6d01c4a22643dae2b1777cab524b.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
33 | },
34 | "intro": "星爵身世迷 终于见爹地",
35 | "premiereAt": 1493913600000,
36 | "grade": "8.5",
37 | "watchCount": 21237,
38 | "cinemaCount": 132,
39 | "scheduleCount": 2417,
40 | "isPromotion": true,
41 | "isNowPlaying": true,
42 | "isComingSoon": "",
43 | "isPresold": ""
44 | }, {
45 | "id": 3364,
46 | "name": "记忆大师",
47 | "cover": {
48 | "origin": "https://pic.maizuo.com/usr/movie/ad2e489494445db9eb1b70bf51e9d8de.jpg"
49 | },
50 | "poster": {
51 | "origin": "https://pic.maizuo.com/usr/movie/39f1c6dedf39810780aee8b9b6c1f63a.jpg",
52 | "thumbnail": "https://pic.maizuo.com/usr/movie/39f1c6dedf39810780aee8b9b6c1f63a.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
53 | },
54 | "intro": "记忆可存取 麻烦一大堆",
55 | "premiereAt": 1493308800000,
56 | "grade": "8.5",
57 | "watchCount": 321873,
58 | "cinemaCount": 132,
59 | "scheduleCount": 1301,
60 | "isPromotion": true,
61 | "isNowPlaying": true,
62 | "isComingSoon": "",
63 | "isPresold": ""
64 | }, {
65 | "id": 3609,
66 | "name": "春娇救志明",
67 | "cover": {
68 | "origin": "https://pic.maizuo.com/usr/movie/a5da1aa2c03b111215fc9d83cde4987c.jpg"
69 | },
70 | "poster": {
71 | "origin": "https://pic.maizuo.com/usr/movie/99d9cb24c162593f44efd5365f1aff73.jpg",
72 | "thumbnail": "https://pic.maizuo.com/usr/movie/99d9cb24c162593f44efd5365f1aff73.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
73 | },
74 | "intro": "感情趋平淡 唯恐不喜欢",
75 | "premiereAt": 1493308800000,
76 | "grade": "7.9",
77 | "watchCount": 456342,
78 | "cinemaCount": 131,
79 | "scheduleCount": 836,
80 | "isPromotion": true,
81 | "isNowPlaying": true,
82 | "isComingSoon": "",
83 | "isPresold": ""
84 | }, {
85 | "id": 3631,
86 | "name": "喜欢你",
87 | "cover": {
88 | "origin": "https://pic.maizuo.com/usr/movie/88ac8daa5a3941b69b61513193e05bee.jpg"
89 | },
90 | "poster": {
91 | "origin": "https://pic.maizuo.com/usr/movie/66e5b065fb8ecf6d871f447f0697635a.jpg",
92 | "thumbnail": "https://pic.maizuo.com/usr/movie/66e5b065fb8ecf6d871f447f0697635a.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
93 | },
94 | "intro": "爱情换主角 命运中出错",
95 | "premiereAt": 1493222400000,
96 | "grade": "8.5",
97 | "watchCount": 203839,
98 | "cinemaCount": 124,
99 | "scheduleCount": 819,
100 | "isPromotion": true,
101 | "isNowPlaying": true,
102 | "isComingSoon": "",
103 | "isPresold": ""
104 | }, {
105 | "id": 3456,
106 | "name": "速度与激情8",
107 | "cover": {
108 | "origin": "https://pic.maizuo.com/usr/movie/f724ae8171940a23bc75593c1176ebf8.jpg"
109 | },
110 | "poster": {
111 | "origin": "https://pic.maizuo.com/usr/movie/285b69bedff4291808174e940367659f.jpg",
112 | "thumbnail": "https://pic.maizuo.com/usr/movie/285b69bedff4291808174e940367659f.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
113 | },
114 | "intro": "车主要黑化 家族被击垮",
115 | "premiereAt": 1492099200000,
116 | "grade": "9.7",
117 | "watchCount": 1764242,
118 | "cinemaCount": 131,
119 | "scheduleCount": 1007,
120 | "isPromotion": true,
121 | "isNowPlaying": true,
122 | "isComingSoon": "",
123 | "isPresold": ""
124 | }, {
125 | "id": 3663,
126 | "name": "摔跤吧!爸爸",
127 | "cover": {
128 | "origin": "https://pic.maizuo.com/usr/movie/50fee00488817e1acda5fad62ef66456.jpg"
129 | },
130 | "poster": {
131 | "origin": "https://pic.maizuo.com/usr/movie/0478e393c2b69bd4b97666854af44263.jpg",
132 | "thumbnail": "https://pic.maizuo.com/usr/movie/0478e393c2b69bd4b97666854af44263.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
133 | },
134 | "intro": "为圆摔跤梦 女儿不心疼",
135 | "premiereAt": 1493913600000,
136 | "grade": "9.5",
137 | "watchCount": 2911,
138 | "cinemaCount": 111,
139 | "scheduleCount": 643,
140 | "isPromotion": true,
141 | "isNowPlaying": true,
142 | "isComingSoon": "",
143 | "isPresold": ""
144 | }],
145 | "page": {
146 | "total": 5,
147 | "current": 1
148 | }
149 | },
150 | "msg": "ok"
151 | }
--------------------------------------------------------------------------------
/src/data/now-playing-2.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "films": [{
5 | "id": 3623,
6 | "name": "蓝精灵:寻找神秘村",
7 | "cover": {
8 | "origin": "https://pic.maizuo.com/usr/movie/6cd0606b878761b18f6046a2b5a1965c.jpg"
9 | },
10 | "poster": {
11 | "origin": "https://pic.maizuo.com/usr/movie/eeb12f9820ace8aa2de856b8a24a1312.jpg",
12 | "thumbnail": "https://pic.maizuo.com/usr/movie/eeb12f9820ace8aa2de856b8a24a1312.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
13 | },
14 | "intro": "魔法再重启 寻找神秘村",
15 | "premiereAt": 1492704000000,
16 | "grade": "8.4",
17 | "watchCount": 286865,
18 | "cinemaCount": 107,
19 | "scheduleCount": 426,
20 | "isPromotion": true,
21 | "isNowPlaying": true,
22 | "isComingSoon": "",
23 | "isPresold": ""
24 | }, {
25 | "id": 3624,
26 | "name": "傲娇与偏见",
27 | "cover": {
28 | "origin": "https://pic.maizuo.com/usr/movie/72daa61be526be7aaa0744a6edfc4a31.jpg"
29 | },
30 | "poster": {
31 | "origin": "https://pic.maizuo.com/usr/movie/311a9082437bf375cf1beccf4ed722a4.jpg",
32 | "thumbnail": "https://pic.maizuo.com/usr/movie/311a9082437bf375cf1beccf4ed722a4.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
33 | },
34 | "intro": "落难富二代 从小被惯坏",
35 | "premiereAt": 1492617600000,
36 | "grade": "8.4",
37 | "watchCount": 97412,
38 | "cinemaCount": 35,
39 | "scheduleCount": 124,
40 | "isPromotion": true,
41 | "isNowPlaying": true,
42 | "isComingSoon": "",
43 | "isPresold": ""
44 | }, {
45 | "id": 1976,
46 | "name": "大话西游之大圣娶亲",
47 | "cover": {
48 | "origin": "https://pic.maizuo.com/usr/movie/0966d64714804be356427f88c35cc088.jpg"
49 | },
50 | "poster": {
51 | "origin": "https://pic.maizuo.com/usr/movie/381a1fe7f9742c35a7bbf6296e9c50bd.jpg",
52 | "thumbnail": "https://pic.maizuo.com/usr/movie/381a1fe7f9742c35a7bbf6296e9c50bd.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
53 | },
54 | "intro": "一生所爱 此情无憾",
55 | "premiereAt": 1492012800000,
56 | "grade": "9.5",
57 | "watchCount": 180234,
58 | "cinemaCount": 12,
59 | "scheduleCount": 25,
60 | "isPromotion": true,
61 | "isNowPlaying": true,
62 | "isComingSoon": "",
63 | "isPresold": ""
64 | }, {
65 | "id": 3378,
66 | "name": "嫌疑人X的献身",
67 | "cover": {
68 | "origin": "https://pic.maizuo.com/usr/movie/c2d6768dcd4f2c35f8be66805bb20396.jpg"
69 | },
70 | "poster": {
71 | "origin": "https://pic.maizuo.com/usr/movie/83fe91fad3e5456330fb71cdf2ab13af.jpg",
72 | "thumbnail": "https://pic.maizuo.com/usr/movie/83fe91fad3e5456330fb71cdf2ab13af.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
73 | },
74 | "intro": "天才谋杀案 诡计造谜团",
75 | "premiereAt": 1490889600000,
76 | "grade": "8.4",
77 | "watchCount": 635477,
78 | "cinemaCount": 2,
79 | "scheduleCount": 3,
80 | "isPromotion": true,
81 | "isNowPlaying": true,
82 | "isComingSoon": "",
83 | "isPresold": ""
84 | }, {
85 | "id": 3601,
86 | "name": "金刚:骷髅岛",
87 | "cover": {
88 | "origin": "https://pic.maizuo.com/usr/100003601/b77973ee3a12e6a1010509ece2f94743.jpg"
89 | },
90 | "poster": {
91 | "origin": "https://pic.maizuo.com/usr/100003601/9c53f31bbb9690662c815ca0265f1c1e.jpg",
92 | "thumbnail": "https://pic.maizuo.com/usr/100003601/9c53f31bbb9690662c815ca0265f1c1e.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
93 | },
94 | "intro": "人类新大陆 金刚快跑路",
95 | "premiereAt": 1490284800000,
96 | "grade": "8.4",
97 | "watchCount": 1537916,
98 | "cinemaCount": 1,
99 | "scheduleCount": 2,
100 | "isPromotion": true,
101 | "isNowPlaying": true,
102 | "isComingSoon": "",
103 | "isPresold": ""
104 | }, {
105 | "id": 3515,
106 | "name": "猪猪侠之英雄猪少年",
107 | "cover": {
108 | "origin": "https://pic.maizuo.com/usr/100003515/b89b1d5a57f5c413ba23e5dbb943f418.jpg"
109 | },
110 | "poster": {
111 | "origin": "https://pic.maizuo.com/usr/100003515/f2c9c87729e13a5dcf9ceae05131161b.jpg",
112 | "thumbnail": "https://pic.maizuo.com/usr/100003515/f2c9c87729e13a5dcf9ceae05131161b.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
113 | },
114 | "intro": "猪猪侠归来 再战大反派",
115 | "premiereAt": 1483718400000,
116 | "grade": "8.4",
117 | "watchCount": 61379,
118 | "cinemaCount": 1,
119 | "scheduleCount": 1,
120 | "isPromotion": true,
121 | "isNowPlaying": true,
122 | "isComingSoon": "",
123 | "isPresold": ""
124 | }, {
125 | "id": 3652,
126 | "name": "超凡战队(原《恐龙战队》)",
127 | "cover": {
128 | "origin": "https://pic.maizuo.com/usr/movie/addb0a27c06216fc3984b4b21572c849.jpg"
129 | },
130 | "poster": {
131 | "origin": "https://pic.maizuo.com/usr/movie/3915cc3aa36a24ceda5b00be4be9de66.jpg",
132 | "thumbnail": "https://pic.maizuo.com/usr/movie/3915cc3aa36a24ceda5b00be4be9de66.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
133 | },
134 | "intro": "少年齐合体 打击恶势力",
135 | "premiereAt": 1494518400000,
136 | "grade": "8.0",
137 | "watchCount": 74,
138 | "cinemaCount": 19,
139 | "scheduleCount": 172,
140 | "isPromotion": false,
141 | "isNowPlaying": true,
142 | "isComingSoon": "",
143 | "isPresold": ""
144 | }],
145 | "page": {
146 | "total": 5,
147 | "current": 2
148 | }
149 | },
150 | "msg": "ok"
151 | }
--------------------------------------------------------------------------------
/src/data/now-playing-3.json:
--------------------------------------------------------------------------------
1 | {"status":0,"data":{"films":[{"id":3037,"name":"美好的意外","cover":{"origin":"https://pic.maizuo.com/usr/100003037/dd52ab3d52c9dad7348f8ca375e389ab.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/114505b4b847a3b3fd1980c363af4f2f.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/114505b4b847a3b3fd1980c363af4f2f.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"人生有假如 陈坤变主夫","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3077,"name":"夏天十九岁的肖像","cover":{"origin":"https://pic.maizuo.com/usr/movie/f78a4d230832abb2db4de463cab5c61d.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/96d77cc6653147996596d73eb7fb6ead.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/96d77cc6653147996596d73eb7fb6ead.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"恋上杀人女 子滔陷迷局","premiereAt":1495814400000,"grade":"8.4","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3654,"name":"荡寇风云","cover":{"origin":"https://pic.maizuo.com/usr/movie/fc871e587cc62b12b6c1d9f088d84bc6.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/0d8f9bfd7aadc7f22046a6ddfe48ba26.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/0d8f9bfd7aadc7f22046a6ddfe48ba26.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"战神戚继光 海战谁更强","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3665,"name":"“吃吃”的爱","cover":{"origin":"https://pic.maizuo.com/usr/movie/b28a38b63e00304adff2812cc144bbfd.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/e395d307bca6013afa0723667bb40452.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/e395d307bca6013afa0723667bb40452.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"打工女明星 酒店把情定","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3666,"name":"三只小猪2","cover":{"origin":"https://pic.maizuo.com/usr/movie/6bdf0f655f2085b6d5cefa52544b1acc.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/8ac85b3f073a3e3a561973e1239f57e6.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/8ac85b3f073a3e3a561973e1239f57e6.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"小猪学功夫 跟怪狼比武","premiereAt":1495814400000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3596,"name":"小茜当家","cover":{"origin":"https://pic.maizuo.com/usr/100003596/86545235a727162f8ed85ebc7709a882.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003596/322a4399a0ed3a9a4f1af99d6c0e0526.jpg","thumbnail":"https://pic.maizuo.com/usr/100003596/322a4399a0ed3a9a4f1af99d6c0e0526.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"真实的故事为蓝本","premiereAt":1495900800000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""},{"id":3485,"name":"悟空圣诞奇遇记","cover":{"origin":"https://pic.maizuo.com/usr/100003485/25987457042163eb9c45717c42557b83.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003485/3142d62674078e5c187eedd2cca9cfea.jpg","thumbnail":"https://pic.maizuo.com/usr/100003485/3142d62674078e5c187eedd2cca9cfea.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"世间若无你 要着铁棒有何用","premiereAt":1496073600000,"grade":"8.0","watchCount":0,"cinemaCount":0,"scheduleCount":0,"isPromotion":false,"isNowPlaying":"","isComingSoon":true,"isPresold":""}],"page":{"total":14,"current":5}},"msg":"ok"}
--------------------------------------------------------------------------------
/src/data/now-playing-4.json:
--------------------------------------------------------------------------------
1 | {"status":0,"data":{"films":[{"id":3622,"name":"提着心,吊着胆","cover":{"origin":"https://pic.maizuo.com/usr/movie/63607d8e5b8a14aaf1d0a6c048894934.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/600bae63775dfc9792ae3c341d367aa5.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/600bae63775dfc9792ae3c341d367aa5.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"疑妻在出轨 犯下杀手罪","premiereAt":1494518400000,"grade":"7.5","watchCount":57,"cinemaCount":10,"scheduleCount":11,"isPromotion":false,"isNowPlaying":true,"isComingSoon":"","isPresold":""},{"id":3642,"name":"一念无明","cover":{"origin":"https://pic.maizuo.com/usr/movie/785d57f7b01098f7b3bc246537c17340.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/890367f8805ee2230bed3dc07fc0bd06.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/890367f8805ee2230bed3dc07fc0bd06.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"母亲身亡后 父亲相处愁","premiereAt":1491494400000,"grade":"7.3","watchCount":35618,"cinemaCount":5,"scheduleCount":9,"isPromotion":false,"isNowPlaying":true,"isComingSoon":"","isPresold":""},{"id":2692,"name":"夜闯寡妇村","cover":{"origin":"https://pic.maizuo.com/usr/100002692/0d1aa497440d9ddff9ff1c272a95d84b.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100002692/15f6f24b85d8bd148696334696f13c03.jpg","thumbnail":"https://pic.maizuo.com/usr/100002692/15f6f24b85d8bd148696334696f13c03.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"谁才是幕后真正的凶手呢? ","premiereAt":1479398400000,"grade":"8.1","watchCount":1682,"cinemaCount":4,"scheduleCount":9,"isPromotion":false,"isNowPlaying":true,"isComingSoon":"","isPresold":""},{"id":3488,"name":"咸鱼传奇","cover":{"origin":"https://pic.maizuo.com/usr/100003488/2a84229ae00707143b6a55bf4b201eea.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003488/1bb2435fbef875786c2b1397d533f8a8.jpg","thumbnail":"https://pic.maizuo.com/usr/100003488/1bb2435fbef875786c2b1397d533f8a8.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"咸鱼也有梦 跨越千年追","premiereAt":1493913600000,"grade":"8.0","watchCount":348,"cinemaCount":3,"scheduleCount":7,"isPromotion":false,"isNowPlaying":true,"isComingSoon":"","isPresold":""},{"id":3351,"name":"谁的青春不热血之深流不息","cover":{"origin":"https://pic.maizuo.com/usr/100003351/11feb9c3358cc5af6315c08a56b66648.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003351/025f50c426b52a1766e3947b4bb470d3.jpg","thumbnail":"https://pic.maizuo.com/usr/100003351/025f50c426b52a1766e3947b4bb470d3.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"奋斗漫画家 追梦去天涯","premiereAt":1474560000000,"grade":"8.0","watchCount":137,"cinemaCount":2,"scheduleCount":6,"isPromotion":false,"isNowPlaying":true,"isComingSoon":"","isPresold":""},{"id":3449,"name":"生门","cover":{"origin":"https://pic.maizuo.com/usr/100003449/ef0f42cfea5dc62e3588aa91e101c3d1.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/100003449/a67ff87d43f3788c86780ea2c2e8426a.jpg","thumbnail":"https://pic.maizuo.com/usr/100003449/a67ff87d43f3788c86780ea2c2e8426a.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"谱生命赞歌 书人间蹉跎","premiereAt":1481817600000,"grade":"8.0","watchCount":2280,"cinemaCount":2,"scheduleCount":6,"isPromotion":false,"isNowPlaying":true,"isComingSoon":"","isPresold":""},{"id":3627,"name":"领袖1935","cover":{"origin":"https://pic.maizuo.com/usr/movie/213668d90b35588199410c0e638c1bb7.jpg"},"poster":{"origin":"https://pic.maizuo.com/usr/movie/9314bd96e20b4cc4af172da1c9d0d503.jpg","thumbnail":"https://pic.maizuo.com/usr/movie/9314bd96e20b4cc4af172da1c9d0d503.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"},"intro":"不怕远征难 长征掀波澜","premiereAt":1490630400000,"grade":"8.0","watchCount":358,"cinemaCount":1,"scheduleCount":2,"isPromotion":false,"isNowPlaying":true,"isComingSoon":"","isPresold":""}],"page":{"total":5,"current":4}},"msg":"ok"}
--------------------------------------------------------------------------------
/src/data/now-playing-5.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "films": [{
5 | "id": 3627,
6 | "name": "领袖1935",
7 | "cover": {
8 | "origin": "https://pic.maizuo.com/usr/movie/213668d90b35588199410c0e638c1bb7.jpg"
9 | },
10 | "poster": {
11 | "origin": "https://pic.maizuo.com/usr/movie/9314bd96e20b4cc4af172da1c9d0d503.jpg",
12 | "thumbnail": "https://pic.maizuo.com/usr/movie/9314bd96e20b4cc4af172da1c9d0d503.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
13 | },
14 | "intro": "不怕远征难 长征掀波澜",
15 | "premiereAt": 1490630400000,
16 | "grade": "8.0",
17 | "watchCount": 358,
18 | "cinemaCount": 1,
19 | "scheduleCount": 2,
20 | "isPromotion": false,
21 | "isNowPlaying": true,
22 | "isComingSoon": "",
23 | "isPresold": ""
24 | }, {
25 | "id": 3634,
26 | "name": "海角有个五店市",
27 | "cover": {
28 | "origin": "https://pic.maizuo.com/usr/movie/6ae06a06a89c40fb1b159867153d1607.jpg"
29 | },
30 | "poster": {
31 | "origin": "https://pic.maizuo.com/usr/movie/478b9f778639975448d9a0159084aede.jpg",
32 | "thumbnail": "https://pic.maizuo.com/usr/movie/478b9f778639975448d9a0159084aede.jpg?x-oss-process=image/resize,m_fixed,h_0,w_150"
33 | },
34 | "intro": "爱情跨世纪 笑泪永铭记",
35 | "premiereAt": 1491494400000,
36 | "grade": "8.0",
37 | "watchCount": 78,
38 | "cinemaCount": 1,
39 | "scheduleCount": 1,
40 | "isPromotion": false,
41 | "isNowPlaying": true,
42 | "isComingSoon": "",
43 | "isPresold": ""
44 | }],
45 | "page": {
46 | "total": 5,
47 | "current": 5
48 | }
49 | },
50 | "msg": "ok"
51 | }
--------------------------------------------------------------------------------
/src/data/now-playing.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "films": [{
5 | "id": 3590,
6 | "name": "拆弹专家",
7 | "cover": {
8 | "origin": "https://pic.maizuo.com/usr/movie/d16085506bf738e6f2763b4d8d5f6cce.jpg"
9 | },
10 | "poster": {
11 | "origin": "https://pic.maizuo.com/usr/movie/3d915dcc28097d3f30a388cdc7099920.jpg",
12 | "thumbnail": "https://pic.maizuo.com/usr/movie/3d915dcc28097d3f30a388cdc7099920.jpg!150x0"
13 | },
14 | "intro": "爆炸袭击案 拆弹反恐难",
15 | "premiereAt": 1493308800000,
16 | "grade": "8.5",
17 | "watchCount": 18004,
18 | "cinemaCount": 129,
19 | "scheduleCount": 2261,
20 | "isPromotion": true,
21 | "isNowPlaying": true,
22 | "isComingSoon": "",
23 | "isPresold": ""
24 | }, {
25 | "id": 3631,
26 | "name": "喜欢你",
27 | "cover": {
28 | "origin": "https://pic.maizuo.com/usr/movie/88ac8daa5a3941b69b61513193e05bee.jpg"
29 | },
30 | "poster": {
31 | "origin": "https://pic.maizuo.com/usr/movie/66e5b065fb8ecf6d871f447f0697635a.jpg",
32 | "thumbnail": "https://pic.maizuo.com/usr/movie/66e5b065fb8ecf6d871f447f0697635a.jpg!150x0"
33 | },
34 | "intro": "爱情换主角 命运中出错",
35 | "premiereAt": 1493222400000,
36 | "grade": "8.5",
37 | "watchCount": 32230,
38 | "cinemaCount": 122,
39 | "scheduleCount": 1528,
40 | "isPromotion": true,
41 | "isNowPlaying": true,
42 | "isComingSoon": "",
43 | "isPresold": ""
44 | }, {
45 | "id": 3609,
46 | "name": "春娇救志明",
47 | "cover": {
48 | "origin": "https://pic.maizuo.com/usr/movie/a5da1aa2c03b111215fc9d83cde4987c.jpg"
49 | },
50 | "poster": {
51 | "origin": "https://pic.maizuo.com/usr/movie/99d9cb24c162593f44efd5365f1aff73.jpg",
52 | "thumbnail": "https://pic.maizuo.com/usr/movie/99d9cb24c162593f44efd5365f1aff73.jpg!150x0"
53 | },
54 | "intro": "感情趋平淡 唯恐不喜欢",
55 | "premiereAt": 1493308800000,
56 | "grade": "7.9",
57 | "watchCount": 67766,
58 | "cinemaCount": 129,
59 | "scheduleCount": 1518,
60 | "isPromotion": true,
61 | "isNowPlaying": true,
62 | "isComingSoon": "",
63 | "isPresold": ""
64 | }, {
65 | "id": 3364,
66 | "name": "记忆大师",
67 | "cover": {
68 | "origin": "https://pic.maizuo.com/usr/movie/ad2e489494445db9eb1b70bf51e9d8de.jpg"
69 | },
70 | "poster": {
71 | "origin": "https://pic.maizuo.com/usr/movie/39f1c6dedf39810780aee8b9b6c1f63a.jpg",
72 | "thumbnail": "https://pic.maizuo.com/usr/movie/39f1c6dedf39810780aee8b9b6c1f63a.jpg!150x0"
73 | },
74 | "intro": "记忆可存取 麻烦一大堆",
75 | "premiereAt": 1493308800000,
76 | "grade": "8.5",
77 | "watchCount": 15223,
78 | "cinemaCount": 131,
79 | "scheduleCount": 1968,
80 | "isPromotion": true,
81 | "isNowPlaying": true,
82 | "isComingSoon": "",
83 | "isPresold": ""
84 | }, {
85 | "id": 3456,
86 | "name": "速度与激情8",
87 | "cover": {
88 | "origin": "https://pic.maizuo.com/usr/movie/f724ae8171940a23bc75593c1176ebf8.jpg"
89 | },
90 | "poster": {
91 | "origin": "https://pic.maizuo.com/usr/movie/285b69bedff4291808174e940367659f.jpg",
92 | "thumbnail": "https://pic.maizuo.com/usr/movie/285b69bedff4291808174e940367659f.jpg!150x0"
93 | },
94 | "intro": "车主要黑化 家族被击垮",
95 | "premiereAt": 1492099200000,
96 | "grade": "9.7",
97 | "watchCount": 1764279,
98 | "cinemaCount": 127,
99 | "scheduleCount": 1492,
100 | "isPromotion": true,
101 | "isNowPlaying": true,
102 | "isComingSoon": "",
103 | "isPresold": ""
104 | }],
105 | "page": {
106 | "total": 7,
107 | "current": 1
108 | }
109 | },
110 | "msg": "ok"
111 | }
--------------------------------------------------------------------------------
/src/data/shop-1.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "list": [{
5 | "attrs": [],
6 | "defaultSkuId": 18,
7 | "displaySalesCount": 2970,
8 | "id": 18,
9 | "isMember": 0,
10 | "masterName": "哆啦A梦十二生肖充电宝5800毫安",
11 | "maxPrice": 12800,
12 | "minPrice": 12800,
13 | "options": null,
14 | "score": 12800,
15 | "skuList": [{
16 | "id": 18,
17 | "image": "http://pic.maizuo.com/manager/a8182630f20c0935f186bae78805446e.jpg",
18 | "inventory": 998,
19 | "masterName": "鼠 ",
20 | "price": 9990,
21 | "salesCount": 243,
22 | "score": 0,
23 | "slaveName": ""
24 | }],
25 | "slaveName": "【鸡年大吉】哆啦萌不停,造型新升级",
26 | "supplierId": 5
27 | }, {
28 | "attrs": [],
29 | "defaultSkuId": 141,
30 | "displaySalesCount": 2700,
31 | "id": 141,
32 | "isMember": 0,
33 | "masterName": "双口智能USB车充",
34 | "maxPrice": 3900,
35 | "minPrice": 3900,
36 | "options": null,
37 | "score": 3900,
38 | "skuList": [{
39 | "id": 141,
40 | "image": "http://pic.maizuo.com/manager/299e59c8cb09bc868fc6ba31e43d1ca1.jpg",
41 | "inventory": 0,
42 | "masterName": "玫瑰金 ",
43 | "price": 3900,
44 | "salesCount": 567,
45 | "score": 0,
46 | "slaveName": ""
47 | }],
48 | "slaveName": "你一个,副驾驶一个,数量刚刚够~",
49 | "supplierId": 5
50 | }, {
51 | "attrs": [],
52 | "defaultSkuId": 118,
53 | "displaySalesCount": 2178,
54 | "id": 118,
55 | "isMember": 0,
56 | "masterName": "迷你镜子线控自拍杆",
57 | "maxPrice": 3900,
58 | "minPrice": 3900,
59 | "options": null,
60 | "score": 3900,
61 | "skuList": [{
62 | "id": 118,
63 | "image": "http://pic.maizuo.com/manager/281d84836e612bd2876fcee6ceec28d0.jpg",
64 | "inventory": 0,
65 | "masterName": "粉色 ",
66 | "price": 2990,
67 | "salesCount": 630,
68 | "score": 0,
69 | "slaveName": ""
70 | }],
71 | "slaveName": "有了后置小镜子,用后置镜头自拍,照片质量更精细喔",
72 | "supplierId": 5
73 | }, {
74 | "attrs": [],
75 | "defaultSkuId": 12,
76 | "displaySalesCount": 1737,
77 | "id": 12,
78 | "isMember": 0,
79 | "masterName": "哆啦A梦挂饰款iPhone6s/6sp保护壳",
80 | "maxPrice": 7900,
81 | "minPrice": 7900,
82 | "options": null,
83 | "score": 7900,
84 | "skuList": [{
85 | "id": 12,
86 | "image": "http://pic.maizuo.com/manager/902e6955b6c684a926f1e86e0dc19b88.jpg",
87 | "inventory": 985,
88 | "masterName": "iphone6/6s ",
89 | "price": 7900,
90 | "salesCount": 864,
91 | "score": 0,
92 | "slaveName": ""
93 | }],
94 | "slaveName": "叮叮当当的声音可萌啦",
95 | "supplierId": 5
96 | }, {
97 | "attrs": [],
98 | "defaultSkuId": 15,
99 | "displaySalesCount": 1728,
100 | "id": 15,
101 | "isMember": 0,
102 | "masterName": "哆啦A梦的道具!之自拍神器伸缩手",
103 | "maxPrice": 3900,
104 | "minPrice": 3900,
105 | "options": null,
106 | "score": 5900,
107 | "skuList": [{
108 | "id": 15,
109 | "image": "http://pic.maizuo.com/manager/37e298bf8610154bea50df1aebfd6a91.jpg",
110 | "inventory": 947,
111 | "masterName": "蓝色 ",
112 | "price": 2990,
113 | "salesCount": 1728,
114 | "score": 0,
115 | "slaveName": ""
116 | }],
117 | "slaveName": "美丽永远自拍杆",
118 | "supplierId": 5
119 | }, {
120 | "attrs": [],
121 | "defaultSkuId": 59,
122 | "displaySalesCount": 1584,
123 | "id": 59,
124 | "isMember": 0,
125 | "masterName": "Rock Bear便携水杯",
126 | "maxPrice": 2900,
127 | "minPrice": 2900,
128 | "options": null,
129 | "score": 2900,
130 | "skuList": [{
131 | "id": 59,
132 | "image": "http://pic.maizuo.com/manager/d691be6e86cce663c427cd583eb18fc3.jpg",
133 | "inventory": 13,
134 | "masterName": "黑色 ",
135 | "price": 2490,
136 | "salesCount": 513,
137 | "score": 0,
138 | "slaveName": ""
139 | }],
140 | "slaveName": "单纯不做作的便宜大水杯",
141 | "supplierId": 5
142 | }, {
143 | "attrs": [],
144 | "defaultSkuId": 138,
145 | "displaySalesCount": 1944,
146 | "id": 138,
147 | "isMember": 0,
148 | "masterName": "飞迪欧 蓝酷3D眼镜",
149 | "maxPrice": 990,
150 | "minPrice": 990,
151 | "options": null,
152 | "score": 499,
153 | "skuList": [{
154 | "id": 138,
155 | "image": "http://pic.maizuo.com/manager/7a1988d369fd6763065aebea60f0122d.jpg",
156 | "inventory": 977,
157 | "masterName": "蓝色 ",
158 | "price": 990,
159 | "salesCount": 1944,
160 | "score": 0,
161 | "slaveName": ""
162 | }],
163 | "slaveName": "不要九九八,九块九包邮",
164 | "supplierId": 7
165 | }, {
166 | "attrs": [],
167 | "defaultSkuId": 92,
168 | "displaySalesCount": 1251,
169 | "id": 92,
170 | "isMember": 0,
171 | "masterName": "哆啦A梦锌合金数据线",
172 | "maxPrice": 3900,
173 | "minPrice": 3900,
174 | "options": null,
175 | "score": 3900,
176 | "skuList": [{
177 | "id": 92,
178 | "image": "http://pic.maizuo.com/manager/7c95934d9c037025169ddfd2aa70ac30.jpg",
179 | "inventory": 961,
180 | "masterName": "蓝色 ",
181 | "price": 3900,
182 | "salesCount": 639,
183 | "score": 0,
184 | "slaveName": ""
185 | }],
186 | "slaveName": "安全的数据线,默默的守候,你值得拥有",
187 | "supplierId": 5
188 | }, {
189 | "attrs": [],
190 | "defaultSkuId": 27,
191 | "displaySalesCount": 1188,
192 | "id": 27,
193 | "isMember": 0,
194 | "masterName": "蜘蛛侠公仔LED灯",
195 | "maxPrice": 5900,
196 | "minPrice": 5900,
197 | "options": null,
198 | "score": 8900,
199 | "skuList": [{
200 | "id": 27,
201 | "image": "http://pic.maizuo.com/manager/424db424a6420d3552e2b36aa0ac8b41.jpg",
202 | "inventory": 979,
203 | "masterName": "红色 ",
204 | "price": 6900,
205 | "salesCount": 1188,
206 | "score": 0,
207 | "slaveName": ""
208 | }],
209 | "slaveName": "蜘蛛侠不在吐丝的时候,他在放射光芒",
210 | "supplierId": 2
211 | }, {
212 | "attrs": [],
213 | "defaultSkuId": 132,
214 | "displaySalesCount": 1125,
215 | "id": 132,
216 | "isMember": 0,
217 | "masterName": "一拖三 充电线A款",
218 | "maxPrice": 3900,
219 | "minPrice": 3900,
220 | "options": null,
221 | "score": 3900,
222 | "skuList": [{
223 | "id": 132,
224 | "image": "http://pic.maizuo.com/manager/b16b13954436b6d8ed87f1d05c6f6271.jpg",
225 | "inventory": 980,
226 | "masterName": "锖色 ",
227 | "price": 2990,
228 | "salesCount": 360,
229 | "score": 0,
230 | "slaveName": ""
231 | }],
232 | "slaveName": "你喜欢的样子我都有",
233 | "supplierId": 5
234 | }, {
235 | "attrs": [],
236 | "defaultSkuId": 4966,
237 | "displaySalesCount": 92,
238 | "id": 1439,
239 | "isMember": 0,
240 | "masterName": "CoCo李玟 世界巡回演唱会 深圳站 2017年5月6日¥580档",
241 | "maxPrice": 0,
242 | "minPrice": 0,
243 | "options": null,
244 | "score": 0,
245 | "skuList": [{
246 | "id": 4966,
247 | "image": "http://mall.s.maizuo.com/8cfd7b5da29323ea1c86f7aceef61476.jpg",
248 | "inventory": 108,
249 | "masterName": "秒杀价199 ",
250 | "price": 19900,
251 | "salesCount": 92,
252 | "score": 0,
253 | "slaveName": ""
254 | }],
255 | "slaveName": "原¥580档,秒杀价现仅需¥199",
256 | "supplierId": 25
257 | }, {
258 | "attrs": [],
259 | "defaultSkuId": 162,
260 | "displaySalesCount": 873,
261 | "id": 162,
262 | "isMember": 0,
263 | "masterName": "长草颜团子iphone7/7p保护壳 挂绳款",
264 | "maxPrice": 9900,
265 | "minPrice": 9900,
266 | "options": null,
267 | "score": 9900,
268 | "skuList": [{
269 | "id": 162,
270 | "image": "http://pic.maizuo.com/manager/171216cac804f0349f3fa140dcae15df.jpg",
271 | "inventory": 994,
272 | "masterName": "iPhone7 ",
273 | "price": 5990,
274 | "salesCount": 450,
275 | "score": 0,
276 | "slaveName": ""
277 | }],
278 | "slaveName": "喜欢被你挂在心上的感觉",
279 | "supplierId": 5
280 | }, {
281 | "attrs": [],
282 | "defaultSkuId": 163,
283 | "displaySalesCount": 810,
284 | "id": 163,
285 | "isMember": 0,
286 | "masterName": "长草呆萌公仔iphone7/7p保护壳",
287 | "maxPrice": 7900,
288 | "minPrice": 7900,
289 | "options": null,
290 | "score": 7900,
291 | "skuList": [{
292 | "id": 163,
293 | "image": "http://pic.maizuo.com/manager/e1c34b67015a93a0932df69086aa597e.jpg",
294 | "inventory": 997,
295 | "masterName": "iPhone7 ",
296 | "price": 7900,
297 | "salesCount": 405,
298 | "score": 0,
299 | "slaveName": ""
300 | }],
301 | "slaveName": "呆萌长草团子,你心动了没",
302 | "supplierId": 5
303 | }, {
304 | "attrs": [],
305 | "defaultSkuId": 157,
306 | "displaySalesCount": 927,
307 | "id": 157,
308 | "isMember": 0,
309 | "masterName": "包邮| 正版贝肯熊定制卡通萌版学生手表",
310 | "maxPrice": 5900,
311 | "minPrice": 5900,
312 | "options": null,
313 | "score": 9900,
314 | "skuList": [{
315 | "id": 157,
316 | "image": "http://pic.maizuo.com/manager/f1ae00dc3df8e20dace792ee443d1ece.jpg",
317 | "inventory": 974,
318 | "masterName": "蓝色 ",
319 | "price": 5990,
320 | "salesCount": 540,
321 | "score": 0,
322 | "slaveName": ""
323 | }],
324 | "slaveName": "撞色表盘表带,金属表扣彰显品质",
325 | "supplierId": 6
326 | }, {
327 | "attrs": [],
328 | "defaultSkuId": 184,
329 | "displaySalesCount": 729,
330 | "id": 184,
331 | "isMember": 0,
332 | "masterName": "蝙蝠侠大战超人系列手办之经典蝙蝠侠",
333 | "maxPrice": 7900,
334 | "minPrice": 7900,
335 | "options": null,
336 | "score": 8800,
337 | "skuList": [{
338 | "id": 184,
339 | "image": "http://pic.maizuo.com/manager/2a9e80f7a21c8d3c2e02638cedb3caea.jpg",
340 | "inventory": 995,
341 | "masterName": "",
342 | "price": 8800,
343 | "salesCount": 729,
344 | "score": 0,
345 | "slaveName": ""
346 | }],
347 | "slaveName": "源自美国,畅销全球,FUNKO正品搪胶收藏玩偶",
348 | "supplierId": 2
349 | }, {
350 | "attrs": [],
351 | "defaultSkuId": 119,
352 | "displaySalesCount": 1215,
353 | "id": 119,
354 | "isMember": 0,
355 | "masterName": "运动腰包",
356 | "maxPrice": 3900,
357 | "minPrice": 3900,
358 | "options": null,
359 | "score": 3900,
360 | "skuList": [{
361 | "id": 119,
362 | "image": "http://pic.maizuo.com/manager/8f570005cf54c9d9c1e1315a07a23407.jpg",
363 | "inventory": 0,
364 | "masterName": "黑色 ",
365 | "price": 3990,
366 | "salesCount": 360,
367 | "score": 0,
368 | "slaveName": ""
369 | }],
370 | "slaveName": "跑步装备不用贵,便宜好用才是对",
371 | "supplierId": 5
372 | }, {
373 | "attrs": [],
374 | "defaultSkuId": 95,
375 | "displaySalesCount": 783,
376 | "id": 95,
377 | "isMember": 0,
378 | "masterName": "Rock Bear车载支架",
379 | "maxPrice": 4900,
380 | "minPrice": 4900,
381 | "options": null,
382 | "score": 5500,
383 | "skuList": [{
384 | "id": 95,
385 | "image": "http://pic.maizuo.com/manager/079275d8615f7268df90f083292185c7.jpg",
386 | "inventory": 957,
387 | "masterName": "黑红 ",
388 | "price": 4990,
389 | "salesCount": 783,
390 | "score": 0,
391 | "slaveName": ""
392 | }],
393 | "slaveName": "我是一款百搭的支架",
394 | "supplierId": 5
395 | }, {
396 | "attrs": [],
397 | "defaultSkuId": 116,
398 | "displaySalesCount": 666,
399 | "id": 116,
400 | "isMember": 0,
401 | "masterName": "磁吸懒人手机支架 ",
402 | "maxPrice": 3200,
403 | "minPrice": 3200,
404 | "options": null,
405 | "score": 3200,
406 | "skuList": [{
407 | "id": 116,
408 | "image": "http://pic.maizuo.com/manager/5b68bac388d460f7c941976d1326020e.jpg",
409 | "inventory": 0,
410 | "masterName": "白色 ",
411 | "price": 3200,
412 | "salesCount": 666,
413 | "score": 0,
414 | "slaveName": ""
415 | }],
416 | "slaveName": "躺着玩手机,再也不会柠檬手啦!",
417 | "supplierId": 5
418 | }, {
419 | "attrs": [],
420 | "defaultSkuId": 107,
421 | "displaySalesCount": 765,
422 | "id": 107,
423 | "isMember": 0,
424 | "masterName": "立体声耳机",
425 | "maxPrice": 5900,
426 | "minPrice": 5900,
427 | "options": null,
428 | "score": 5900,
429 | "skuList": [{
430 | "id": 107,
431 | "image": "http://pic.maizuo.com/manager/33f8ab9459276389404fae58b955f483.jpg",
432 | "inventory": 981,
433 | "masterName": "红色 ",
434 | "price": 5900,
435 | "salesCount": 279,
436 | "score": 0,
437 | "slaveName": ""
438 | }],
439 | "slaveName": "别看我像豌豆射手,其实我声音超正的",
440 | "supplierId": 5
441 | }, {
442 | "attrs": [],
443 | "defaultSkuId": 144,
444 | "displaySalesCount": 1017,
445 | "id": 144,
446 | "isMember": 0,
447 | "masterName": "后视镜行车记录仪",
448 | "maxPrice": 35900,
449 | "minPrice": 35900,
450 | "options": null,
451 | "score": 39900,
452 | "skuList": [{
453 | "id": 144,
454 | "image": "http://pic.maizuo.com/manager/c1e3adbb8ee2c99172717a14e30bfcca.jpg",
455 | "inventory": 926,
456 | "masterName": "黑色 ",
457 | "price": 32990,
458 | "salesCount": 1017,
459 | "score": 0,
460 | "slaveName": ""
461 | }],
462 | "slaveName": "碰瓷倒车不用怕,出门在外全靠它",
463 | "supplierId": 5
464 | }],
465 | "total": 358
466 | },
467 | "msg": "ok"
468 | }
--------------------------------------------------------------------------------
/src/data/shop-2.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "list": [{
5 | "attrs": [],
6 | "defaultSkuId": 130,
7 | "displaySalesCount": 738,
8 | "id": 130,
9 | "isMember": 0,
10 | "masterName": "二合一Micro转Lightning面条数据线 L=100CM",
11 | "maxPrice": 2900,
12 | "minPrice": 2900,
13 | "options": null,
14 | "score": 2900,
15 | "skuList": [{
16 | "id": 130,
17 | "image": "http://pic.maizuo.com/manager/0aed9b48432ff0302a5b4f4667bfefed.jpg",
18 | "inventory": 10,
19 | "masterName": "白色 ",
20 | "price": 2900,
21 | "salesCount": 108,
22 | "score": 0,
23 | "slaveName": ""
24 | }],
25 | "slaveName": "我一看小数据线,还有两幅面孔呢",
26 | "supplierId": 5
27 | }, {
28 | "attrs": [],
29 | "defaultSkuId": 160,
30 | "displaySalesCount": 612,
31 | "id": 160,
32 | "isMember": 0,
33 | "masterName": "贝肯熊安卓苹果手机通用数据线",
34 | "maxPrice": 3500,
35 | "minPrice": 3500,
36 | "options": null,
37 | "score": 3500,
38 | "skuList": [{
39 | "id": 160,
40 | "image": "http://pic.maizuo.com/manager/9c6b6167bf2411e6702dcbb37c1359a5.jpg",
41 | "inventory": 994,
42 | "masterName": "蓝色 ",
43 | "price": 3500,
44 | "salesCount": 162,
45 | "score": 0,
46 | "slaveName": ""
47 | }],
48 | "slaveName": "别看我不起眼,但是我们安卓苹果通用的哦",
49 | "supplierId": 6
50 | }, {
51 | "attrs": [],
52 | "defaultSkuId": 158,
53 | "displaySalesCount": 594,
54 | "id": 158,
55 | "isMember": 0,
56 | "masterName": "萌萌贝肯熊书包",
57 | "maxPrice": 11900,
58 | "minPrice": 11900,
59 | "options": null,
60 | "score": 15900,
61 | "skuList": [{
62 | "id": 158,
63 | "image": "http://pic.maizuo.com/manager/35dcf56467a2ea426d730ee19e011fb5.jpg",
64 | "inventory": 980,
65 | "masterName": "蓝灰色 ",
66 | "price": 9990,
67 | "salesCount": 594,
68 | "score": 0,
69 | "slaveName": ""
70 | }],
71 | "slaveName": "萌童必备热销款!",
72 | "supplierId": 6
73 | }, {
74 | "attrs": [],
75 | "defaultSkuId": 159,
76 | "displaySalesCount": 711,
77 | "id": 159,
78 | "isMember": 0,
79 | "masterName": "贝肯熊萌萌趴趴枕",
80 | "maxPrice": 12300,
81 | "minPrice": 12300,
82 | "options": null,
83 | "score": 12300,
84 | "skuList": [{
85 | "id": 159,
86 | "image": "http://pic.maizuo.com/manager/ca5f8ec16bf6e7554e4423fc6cad6008.jpg",
87 | "inventory": 958,
88 | "masterName": "灰色 ",
89 | "price": 7990,
90 | "salesCount": 711,
91 | "score": 0,
92 | "slaveName": ""
93 | }],
94 | "slaveName": "见过这么萌的枕头嘛,喜欢就让它伴你入梦",
95 | "supplierId": 6
96 | }, {
97 | "attrs": [],
98 | "defaultSkuId": 23,
99 | "displaySalesCount": 549,
100 | "id": 23,
101 | "isMember": 0,
102 | "masterName": "漫威正版美国队长LED灯USB床头灯小夜灯",
103 | "maxPrice": 8900,
104 | "minPrice": 8900,
105 | "options": null,
106 | "score": 8900,
107 | "skuList": [{
108 | "id": 23,
109 | "image": "http://pic.maizuo.com/manager/508a92c0eb723eb84411f72b056310ce.jpg",
110 | "inventory": 978,
111 | "masterName": "蓝红 ",
112 | "price": 4990,
113 | "salesCount": 549,
114 | "score": 0,
115 | "slaveName": ""
116 | }],
117 | "slaveName": "超级英雄保护你的眼睛",
118 | "supplierId": 2
119 | }, {
120 | "attrs": [],
121 | "defaultSkuId": 146,
122 | "displaySalesCount": 666,
123 | "id": 146,
124 | "isMember": 0,
125 | "masterName": "飞迪欧 绿酷3D眼镜",
126 | "maxPrice": 990,
127 | "minPrice": 990,
128 | "options": null,
129 | "score": 990,
130 | "skuList": [{
131 | "id": 146,
132 | "image": "http://pic.maizuo.com/manager/21bba61bad40b21f0dac341acf07c709.jpg",
133 | "inventory": 974,
134 | "masterName": "绿色 ",
135 | "price": 990,
136 | "salesCount": 666,
137 | "score": 0,
138 | "slaveName": ""
139 | }],
140 | "slaveName": "酷酷3D眼镜,把时尚带到影院里",
141 | "supplierId": 7
142 | }, {
143 | "attrs": [],
144 | "defaultSkuId": 218,
145 | "displaySalesCount": 630,
146 | "id": 218,
147 | "isMember": 0,
148 | "masterName": "卡哇伊英雄来袭系列抱枕",
149 | "maxPrice": 3900,
150 | "minPrice": 3900,
151 | "options": null,
152 | "score": 4900,
153 | "skuList": [{
154 | "id": 218,
155 | "image": "http://pic.maizuo.com/manager/5a1482b3b9ebc4cf235ef26bac15629f.jpg",
156 | "inventory": 984,
157 | "masterName": "蜘蛛侠 ",
158 | "price": 3900,
159 | "salesCount": 198,
160 | "score": 0,
161 | "slaveName": ""
162 | }],
163 | "slaveName": "可爱抱枕还能满足你的英雄情结",
164 | "supplierId": 2
165 | }, {
166 | "attrs": [],
167 | "defaultSkuId": 4746,
168 | "displaySalesCount": 326,
169 | "id": 1326,
170 | "isMember": 0,
171 | "masterName": "张惠妹“乌托邦 2.0 庆典”世界巡回演唱会-深圳站 2017.04.22~23",
172 | "maxPrice": 0,
173 | "minPrice": 0,
174 | "options": null,
175 | "score": 0,
176 | "skuList": [{
177 | "id": 4746,
178 | "image": "http://mall.s.maizuo.com/13cb25dcb369d640d529ef12da834e5c.jpg",
179 | "inventory": 0,
180 | "masterName": "22日 780票面 ",
181 | "price": 78000,
182 | "salesCount": 172,
183 | "score": 0,
184 | "slaveName": ""
185 | }],
186 | "slaveName": "天后乌托邦巡演再度来袭(下单最高减300)",
187 | "supplierId": 9
188 | }, {
189 | "attrs": [],
190 | "defaultSkuId": 4641,
191 | "displaySalesCount": 441,
192 | "id": 1274,
193 | "isMember": 0,
194 | "masterName": "哆啦A梦 记忆面包摆件U盘",
195 | "maxPrice": 0,
196 | "minPrice": 0,
197 | "options": null,
198 | "score": 0,
199 | "skuList": [{
200 | "id": 4641,
201 | "image": "http://mall.s.maizuo.com/cb6130a1ed54d1fa92c7c29fa252b451.jpg",
202 | "inventory": 10,
203 | "masterName": "",
204 | "price": 13900,
205 | "salesCount": 441,
206 | "score": 0,
207 | "slaveName": ""
208 | }],
209 | "slaveName": "可爱蓝胖子造型U盘",
210 | "supplierId": 5
211 | }, {
212 | "attrs": [],
213 | "defaultSkuId": 94,
214 | "displaySalesCount": 423,
215 | "id": 94,
216 | "isMember": 0,
217 | "masterName": "锌合金数据线",
218 | "maxPrice": 3900,
219 | "minPrice": 3900,
220 | "options": null,
221 | "score": 3900,
222 | "skuList": [{
223 | "id": 94,
224 | "image": "http://pic.maizuo.com/manager/dbbf4d3eb6b1b2b5a7e737c12beaf05d.jpg",
225 | "inventory": 997,
226 | "masterName": "黑色 ",
227 | "price": 3900,
228 | "salesCount": 198,
229 | "score": 0,
230 | "slaveName": ""
231 | }],
232 | "slaveName": "更长!更滑!更好用!",
233 | "supplierId": 5
234 | }, {
235 | "attrs": [],
236 | "defaultSkuId": 4968,
237 | "displaySalesCount": 41,
238 | "id": 1441,
239 | "isMember": 0,
240 | "masterName": "CoCo李玟 世界巡回演唱会 深圳站 2017年5月6日¥980档",
241 | "maxPrice": 0,
242 | "minPrice": 0,
243 | "options": null,
244 | "score": 0,
245 | "skuList": [{
246 | "id": 4968,
247 | "image": "http://mall.s.maizuo.com/07fdfffd300103e0a87be4b0e295c281.jpg",
248 | "inventory": 159,
249 | "masterName": "秒杀价399 ",
250 | "price": 39900,
251 | "salesCount": 41,
252 | "score": 0,
253 | "slaveName": ""
254 | }],
255 | "slaveName": "原¥980档,秒杀价现仅需¥399",
256 | "supplierId": 25
257 | }, {
258 | "attrs": [],
259 | "defaultSkuId": 217,
260 | "displaySalesCount": 477,
261 | "id": 217,
262 | "isMember": 0,
263 | "masterName": "漫威英雄卡通抱枕两用空调被",
264 | "maxPrice": 11900,
265 | "minPrice": 11900,
266 | "options": null,
267 | "score": 11900,
268 | "skuList": [{
269 | "id": 217,
270 | "image": "http://pic.maizuo.com/manager/42861c352eeab259610037f5ffce2834.jpg",
271 | "inventory": 6,
272 | "masterName": "美国队长 ",
273 | "price": 11900,
274 | "salesCount": 252,
275 | "score": 0,
276 | "slaveName": ""
277 | }],
278 | "slaveName": "卡通靠垫被,给你温暖每一天",
279 | "supplierId": 2
280 | }, {
281 | "attrs": [],
282 | "defaultSkuId": 99,
283 | "displaySalesCount": 639,
284 | "id": 99,
285 | "isMember": 0,
286 | "masterName": "萌萌贝肯熊纸巾盒",
287 | "maxPrice": 3900,
288 | "minPrice": 3900,
289 | "options": null,
290 | "score": 3900,
291 | "skuList": [{
292 | "id": 99,
293 | "image": "http://pic.maizuo.com/manager/1fa2edbcb2809c0f82f6adc587d9126f.jpg",
294 | "inventory": 968,
295 | "masterName": "灰色 ",
296 | "price": 3900,
297 | "salesCount": 639,
298 | "score": 0,
299 | "slaveName": ""
300 | }],
301 | "slaveName": "如果你愿意一层一层一层地抽空我的心",
302 | "supplierId": 6
303 | }, {
304 | "attrs": [],
305 | "defaultSkuId": 140,
306 | "displaySalesCount": 405,
307 | "id": 140,
308 | "isMember": 0,
309 | "masterName": "汽车防滑垫",
310 | "maxPrice": 1900,
311 | "minPrice": 1900,
312 | "options": null,
313 | "score": 1900,
314 | "skuList": [{
315 | "id": 140,
316 | "image": "http://pic.maizuo.com/manager/3c5abdf2dc9307daaa4cd24f45e3842d.jpg",
317 | "inventory": 37,
318 | "masterName": "格纹 ",
319 | "price": 1900,
320 | "salesCount": 261,
321 | "score": 0,
322 | "slaveName": ""
323 | }],
324 | "slaveName": "让手机告别在宝贝车上摩擦,摩擦",
325 | "supplierId": 5
326 | }, {
327 | "attrs": [],
328 | "defaultSkuId": 149,
329 | "displaySalesCount": 405,
330 | "id": 149,
331 | "isMember": 0,
332 | "masterName": "无线充电盘",
333 | "maxPrice": 10900,
334 | "minPrice": 10900,
335 | "options": null,
336 | "score": 10900,
337 | "skuList": [{
338 | "id": 149,
339 | "image": "http://pic.maizuo.com/manager/8ebb0f1ec68af56d6e6334b6fd344ee5.jpg",
340 | "inventory": 990,
341 | "masterName": "黑色 ",
342 | "price": 7990,
343 | "salesCount": 243,
344 | "score": 0,
345 | "slaveName": ""
346 | }],
347 | "slaveName": "充电五分钟,不用数据线(本身手机不支持无线充电的,请自行购买无线充电接收器!!)",
348 | "supplierId": 5
349 | }, {
350 | "attrs": [],
351 | "defaultSkuId": 238,
352 | "displaySalesCount": 594,
353 | "id": 238,
354 | "isMember": 0,
355 | "masterName": "喵星星小夜灯",
356 | "maxPrice": 11800,
357 | "minPrice": 11800,
358 | "options": null,
359 | "score": 11800,
360 | "skuList": [{
361 | "id": 238,
362 | "image": "http://pic.maizuo.com/manager/4f020d198553a0229f7882e5b98354c9.jpg",
363 | "inventory": 13,
364 | "masterName": "喵星星 ",
365 | "price": 8990,
366 | "salesCount": 594,
367 | "score": 0,
368 | "slaveName": ""
369 | }],
370 | "slaveName": "萌萌小夜灯,夜晚提供光明",
371 | "supplierId": 3
372 | }, {
373 | "attrs": [],
374 | "defaultSkuId": 241,
375 | "displaySalesCount": 351,
376 | "id": 241,
377 | "isMember": 0,
378 | "masterName": "卡通形象硬质透明手机壳iphone6/6s",
379 | "maxPrice": 4900,
380 | "minPrice": 4900,
381 | "options": null,
382 | "score": 4900,
383 | "skuList": [{
384 | "id": 241,
385 | "image": "http://pic.maizuo.com/manager/1cacbb43889527a1df0cfa3b5f51cdb3.jpg",
386 | "inventory": 49,
387 | "masterName": "黄豆豆 ",
388 | "price": 4900,
389 | "salesCount": 90,
390 | "score": 0,
391 | "slaveName": ""
392 | }],
393 | "slaveName": "静静的看着你,有木有被我萌化",
394 | "supplierId": 3
395 | }, {
396 | "attrs": [],
397 | "defaultSkuId": 4789,
398 | "displaySalesCount": 154,
399 | "id": 1345,
400 | "isMember": 0,
401 | "masterName": "【你妹来啦】好妹妹2017“自在如风”全国巡回演唱会深圳站清新来袭!",
402 | "maxPrice": 0,
403 | "minPrice": 0,
404 | "options": null,
405 | "score": 0,
406 | "skuList": [{
407 | "id": 4789,
408 | "image": "http://mall.s.maizuo.com/1a2ccc527901fafacb2b8d298184c9d6.jpg",
409 | "inventory": 23,
410 | "masterName": "99 ",
411 | "price": 9900,
412 | "salesCount": 96,
413 | "score": 0,
414 | "slaveName": ""
415 | }],
416 | "slaveName": "小清新民谣风来袭",
417 | "supplierId": 9
418 | }, {
419 | "attrs": [],
420 | "defaultSkuId": 127,
421 | "displaySalesCount": 450,
422 | "id": 127,
423 | "isMember": 0,
424 | "masterName": "iPhone 7 Plus 钢化玻璃保护膜(2.5D) 0.3MM",
425 | "maxPrice": 2600,
426 | "minPrice": 2600,
427 | "options": null,
428 | "score": 2600,
429 | "skuList": [{
430 | "id": 127,
431 | "image": "http://pic.maizuo.com/manager/8d986d21968a22bdfe6fce867775fd32.jpg",
432 | "inventory": 976,
433 | "masterName": "透明 ",
434 | "price": 2600,
435 | "salesCount": 450,
436 | "score": 0,
437 | "slaveName": ""
438 | }],
439 | "slaveName": "我是保护手机屏幕的小透明",
440 | "supplierId": 5
441 | }, {
442 | "attrs": [],
443 | "defaultSkuId": 4468,
444 | "displaySalesCount": 684,
445 | "id": 1172,
446 | "isMember": 0,
447 | "masterName": "超轻近视3d眼镜夹片 圆形",
448 | "maxPrice": 0,
449 | "minPrice": 0,
450 | "options": null,
451 | "score": 0,
452 | "skuList": [{
453 | "id": 4468,
454 | "image": "http://mall.s.maizuo.com/9e19c69db5d828ff38ed1d21859bd973.jpg",
455 | "inventory": 924,
456 | "masterName": "",
457 | "price": 1900,
458 | "salesCount": 684,
459 | "score": 0,
460 | "slaveName": ""
461 | }],
462 | "slaveName": "再也不用担心有要带两个眼镜看电影啦",
463 | "supplierId": 1
464 | }],
465 | "total": 358
466 | },
467 | "msg": "ok"
468 | }
--------------------------------------------------------------------------------
/src/data/shop-3.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 0,
3 | "data": {
4 | "list": [{
5 | "attrs": [],
6 | "defaultSkuId": 4721,
7 | "displaySalesCount": 351,
8 | "id": 1320,
9 | "isMember": 0,
10 | "masterName": "小麦充电宝",
11 | "maxPrice": 0,
12 | "minPrice": 0,
13 | "options": null,
14 | "score": 0,
15 | "skuList": [{
16 | "id": 4721,
17 | "image": "http://mall.s.maizuo.com/8b8a9ce7c1a69294f2301cfee6f51349.jpg",
18 | "inventory": 978,
19 | "masterName": "白色 ",
20 | "price": 8990,
21 | "salesCount": 198,
22 | "score": 0,
23 | "slaveName": ""
24 | }],
25 | "slaveName": "容量超大,自带双重数据线,出门只带我就好啦!",
26 | "supplierId": 9
27 | }, {
28 | "attrs": [],
29 | "defaultSkuId": 183,
30 | "displaySalesCount": 306,
31 | "id": 183,
32 | "isMember": 0,
33 | "masterName": "蝙蝠侠大战超人系列手办之超人",
34 | "maxPrice": 8800,
35 | "minPrice": 8800,
36 | "options": null,
37 | "score": 8800,
38 | "skuList": [{
39 | "id": 183,
40 | "image": "http://pic.maizuo.com/manager/349a2d2519870f33e3fec5de5ad89fb1.jpg",
41 | "inventory": 996,
42 | "masterName": "",
43 | "price": 7900,
44 | "salesCount": 306,
45 | "score": 0,
46 | "slaveName": ""
47 | }],
48 | "slaveName": "源自美国,畅销全球,FUNKO正品搪胶收藏玩偶",
49 | "supplierId": 2
50 | }, {
51 | "attrs": [],
52 | "defaultSkuId": 243,
53 | "displaySalesCount": 432,
54 | "id": 243,
55 | "isMember": 0,
56 | "masterName": "萌仔形象马克杯",
57 | "maxPrice": 5700,
58 | "minPrice": 5700,
59 | "options": null,
60 | "score": 5700,
61 | "skuList": [{
62 | "id": 243,
63 | "image": "http://pic.maizuo.com/manager/b8ca83cf0efff7a7efc120659032af24.jpg",
64 | "inventory": 44,
65 | "masterName": "棕色 ",
66 | "price": 4990,
67 | "salesCount": 180,
68 | "score": 0,
69 | "slaveName": ""
70 | }],
71 | "slaveName": "琦琦熊、黄豆豆,选一款,捧在手心里",
72 | "supplierId": 3
73 | }, {
74 | "attrs": [],
75 | "defaultSkuId": 299,
76 | "displaySalesCount": 423,
77 | "id": 299,
78 | "isMember": 0,
79 | "masterName": "Y5立体声有线耳机 红蓝两色可选",
80 | "maxPrice": 9900,
81 | "minPrice": 9900,
82 | "options": null,
83 | "score": 9900,
84 | "skuList": [{
85 | "id": 299,
86 | "image": "http://pic.maizuo.com/manager/91089e69c5b5b10f107d7ff5d9dbd9e5.jpg",
87 | "inventory": 5,
88 | "masterName": "红色 ",
89 | "price": 9900,
90 | "salesCount": 207,
91 | "score": 0,
92 | "slaveName": ""
93 | }],
94 | "slaveName": "有点小酷的造型,音质同样有保障",
95 | "supplierId": 5
96 | }, {
97 | "attrs": [],
98 | "defaultSkuId": 58,
99 | "displaySalesCount": 342,
100 | "id": 58,
101 | "isMember": 0,
102 | "masterName": "Rock Bear便携轻巧自拍杆",
103 | "maxPrice": 4900,
104 | "minPrice": 4900,
105 | "options": null,
106 | "score": 4900,
107 | "skuList": [{
108 | "id": 58,
109 | "image": "http://pic.maizuo.com/manager/c68181ddaf891a8f2a9fbfca6fc19939.jpg",
110 | "inventory": 980,
111 | "masterName": "黑红 ",
112 | "price": 4900,
113 | "salesCount": 342,
114 | "score": 0,
115 | "slaveName": ""
116 | }],
117 | "slaveName": "帅气永远自拍杆",
118 | "supplierId": 5
119 | }, {
120 | "attrs": [],
121 | "defaultSkuId": 80,
122 | "displaySalesCount": 333,
123 | "id": 80,
124 | "isMember": 0,
125 | "masterName": "立体熊仔iphone6/6s手机壳",
126 | "maxPrice": 5900,
127 | "minPrice": 5900,
128 | "options": null,
129 | "score": 5900,
130 | "skuList": [{
131 | "id": 80,
132 | "image": "http://pic.maizuo.com/manager/1ca77185aa4049b9dd0c278835e1b2a4.jpg",
133 | "inventory": 996,
134 | "masterName": "黑色 ",
135 | "price": 5900,
136 | "salesCount": 162,
137 | "score": 0,
138 | "slaveName": ""
139 | }],
140 | "slaveName": "磨砂壳面,防汗防滑,壳面经过细致打磨,光滑舒适",
141 | "supplierId": 5
142 | }, {
143 | "attrs": [],
144 | "defaultSkuId": 245,
145 | "displaySalesCount": 450,
146 | "id": 245,
147 | "isMember": 0,
148 | "masterName": "天天爱消除卡通形象U型枕",
149 | "maxPrice": 6900,
150 | "minPrice": 6900,
151 | "options": null,
152 | "score": 6900,
153 | "skuList": [{
154 | "id": 245,
155 | "image": "http://pic.maizuo.com/manager/3756bd64c03391c3b1eaa3067facc24b.jpg",
156 | "inventory": 42,
157 | "masterName": "紫色 ",
158 | "price": 6900,
159 | "salesCount": 126,
160 | "score": 0,
161 | "slaveName": ""
162 | }],
163 | "slaveName": "累了困了,就靠在我的肩上",
164 | "supplierId": 3
165 | }, {
166 | "attrs": [],
167 | "defaultSkuId": 4877,
168 | "displaySalesCount": 270,
169 | "id": 1391,
170 | "isMember": 0,
171 | "masterName": "熊本熊脸型抱枕",
172 | "maxPrice": 0,
173 | "minPrice": 0,
174 | "options": null,
175 | "score": 0,
176 | "skuList": [{
177 | "id": 4877,
178 | "image": "http://mall.s.maizuo.com/7890fab7c831195cef6b7b1459419998.jpg",
179 | "inventory": 10,
180 | "masterName": "",
181 | "price": 1990,
182 | "salesCount": 270,
183 | "score": 0,
184 | "slaveName": ""
185 | }],
186 | "slaveName": "比鸡排还大的脸(预售5月中旬发货)",
187 | "supplierId": 9
188 | }, {
189 | "attrs": [],
190 | "defaultSkuId": 93,
191 | "displaySalesCount": 351,
192 | "id": 93,
193 | "isMember": 0,
194 | "masterName": "哆啦A梦 吸盘式保护支架",
195 | "maxPrice": 4900,
196 | "minPrice": 4900,
197 | "options": null,
198 | "score": 7900,
199 | "skuList": [{
200 | "id": 93,
201 | "image": "http://pic.maizuo.com/manager/aa2271411b939c61666b5bebc5d646c7.jpg",
202 | "inventory": 982,
203 | "masterName": "蓝色 ",
204 | "price": 5500,
205 | "salesCount": 351,
206 | "score": 0,
207 | "slaveName": ""
208 | }],
209 | "slaveName": "主人去哪我去哪,我是可爱的小支架,大屏小屏全面通用",
210 | "supplierId": 5
211 | }, {
212 | "attrs": [],
213 | "defaultSkuId": 192,
214 | "displaySalesCount": 360,
215 | "id": 192,
216 | "isMember": 0,
217 | "masterName": "哆啦A梦暖手宝移动电源(配绒布袋)",
218 | "maxPrice": 15800,
219 | "minPrice": 15800,
220 | "options": null,
221 | "score": 15800,
222 | "skuList": [{
223 | "id": 192,
224 | "image": "http://pic.maizuo.com/manager/2e75903ee00e58dcfd3e67ad0ff3bbcb.jpg",
225 | "inventory": 994,
226 | "masterName": "哆啦A梦 ",
227 | "price": 15800,
228 | "salesCount": 225,
229 | "score": 0,
230 | "slaveName": ""
231 | }],
232 | "slaveName": "能取暖的除了爱情,还有暖手宝",
233 | "supplierId": 5
234 | }, {
235 | "attrs": [],
236 | "defaultSkuId": 135,
237 | "displaySalesCount": 396,
238 | "id": 135,
239 | "isMember": 0,
240 | "masterName": "磁吸懒人平板支架",
241 | "maxPrice": 5900,
242 | "minPrice": 5900,
243 | "options": null,
244 | "score": 5900,
245 | "skuList": [{
246 | "id": 135,
247 | "image": "http://pic.maizuo.com/manager/c590cb3c2a282f829971142b897ade09.jpg",
248 | "inventory": 15,
249 | "masterName": "玫瑰金 ",
250 | "price": 4990,
251 | "salesCount": 225,
252 | "score": 0,
253 | "slaveName": ""
254 | }],
255 | "slaveName": "解放双手神器",
256 | "supplierId": 5
257 | }, {
258 | "attrs": [],
259 | "defaultSkuId": 78,
260 | "displaySalesCount": 261,
261 | "id": 78,
262 | "isMember": 0,
263 | "masterName": "哆啦A梦防摔半透保护壳i6/6s",
264 | "maxPrice": 7900,
265 | "minPrice": 7900,
266 | "options": null,
267 | "score": 7900,
268 | "skuList": [{
269 | "id": 78,
270 | "image": "http://pic.maizuo.com/manager/209027a0b76572de0eae2c46dd4c000b.jpg",
271 | "inventory": 996,
272 | "masterName": "精神 ",
273 | "price": 7900,
274 | "salesCount": 144,
275 | "score": 0,
276 | "slaveName": ""
277 | }],
278 | "slaveName": "风吹雨打都不怕",
279 | "supplierId": 5
280 | }, {
281 | "attrs": [],
282 | "defaultSkuId": 305,
283 | "displaySalesCount": 531,
284 | "id": 305,
285 | "isMember": 0,
286 | "masterName": "双口旅行充电器",
287 | "maxPrice": 3600,
288 | "minPrice": 3600,
289 | "options": null,
290 | "score": 3600,
291 | "skuList": [{
292 | "id": 305,
293 | "image": "http://pic.maizuo.com/manager/4166ceb9ad4950eb7661c6f1ddddeb78.jpg",
294 | "inventory": 985,
295 | "masterName": "黑色 ",
296 | "price": 3600,
297 | "salesCount": 189,
298 | "score": 0,
299 | "slaveName": ""
300 | }],
301 | "slaveName": "手机平板一起充,不用担心电子产品没有电啦",
302 | "supplierId": 5
303 | }, {
304 | "attrs": [],
305 | "defaultSkuId": 4520,
306 | "displaySalesCount": 342,
307 | "id": 1196,
308 | "isMember": 0,
309 | "masterName": "龙猫搪胶挂件+绳子",
310 | "maxPrice": 0,
311 | "minPrice": 0,
312 | "options": null,
313 | "score": 0,
314 | "skuList": [{
315 | "id": 4520,
316 | "image": "http://mall.s.maizuo.com/79de0b8d6cd0340eccb876e563aa6329.jpg",
317 | "inventory": 962,
318 | "masterName": "",
319 | "price": 1800,
320 | "salesCount": 342,
321 | "score": 0,
322 | "slaveName": ""
323 | }],
324 | "slaveName": "人人心中都有个龙猫,童年就永远不会消失",
325 | "supplierId": 10
326 | }, {
327 | "attrs": [],
328 | "defaultSkuId": 224,
329 | "displaySalesCount": 261,
330 | "id": 224,
331 | "isMember": 0,
332 | "masterName": "甲壳虫折叠儿童3d眼镜",
333 | "maxPrice": 1900,
334 | "minPrice": 1900,
335 | "options": null,
336 | "score": 1900,
337 | "skuList": [{
338 | "id": 224,
339 | "image": "http://pic.maizuo.com/manager/69ffdda97414691d2a7ebe5f14885536.jpg",
340 | "inventory": 999,
341 | "masterName": "黄色 ",
342 | "price": 1900,
343 | "salesCount": 45,
344 | "score": 0,
345 | "slaveName": ""
346 | }],
347 | "slaveName": "适合2-13岁以下儿童使用",
348 | "supplierId": 1
349 | }, {
350 | "attrs": [],
351 | "defaultSkuId": 29,
352 | "displaySalesCount": 243,
353 | "id": 29,
354 | "isMember": 0,
355 | "masterName": "哆啦A梦i7/7P简约手机壳",
356 | "maxPrice": 4500,
357 | "minPrice": 4500,
358 | "options": null,
359 | "score": 4500,
360 | "skuList": [{
361 | "id": 29,
362 | "image": "http://pic.maizuo.com/manager/881f6014ceba808d72d15aa4119de5d4.jpg",
363 | "inventory": 995,
364 | "masterName": "iPhone7 ",
365 | "price": 4500,
366 | "salesCount": 135,
367 | "score": 0,
368 | "slaveName": ""
369 | }],
370 | "slaveName": "你的哆啦A梦,快点把它带回家",
371 | "supplierId": 5
372 | }, {
373 | "attrs": [],
374 | "defaultSkuId": 321,
375 | "displaySalesCount": 225,
376 | "id": 321,
377 | "isMember": 0,
378 | "masterName": "星球大战-达斯摩尔T恤",
379 | "maxPrice": 14800,
380 | "minPrice": 14800,
381 | "options": null,
382 | "score": 14800,
383 | "skuList": [{
384 | "id": 321,
385 | "image": "http://pic.maizuo.com/manager/81023a12f121a6f073c2e9e99df9f494.jpg",
386 | "inventory": 999,
387 | "masterName": "S ",
388 | "price": 14800,
389 | "salesCount": 45,
390 | "score": 0,
391 | "slaveName": ""
392 | }],
393 | "slaveName": "At last we shall have revenge!",
394 | "supplierId": 8
395 | }, {
396 | "attrs": [],
397 | "defaultSkuId": 4550,
398 | "displaySalesCount": 675,
399 | "id": 1217,
400 | "isMember": 0,
401 | "masterName": "精致立体小黄人搪胶公仔挂件(共3款)",
402 | "maxPrice": 0,
403 | "minPrice": 0,
404 | "options": null,
405 | "score": 0,
406 | "skuList": [{
407 | "id": 4550,
408 | "image": "http://mall.s.maizuo.com/91020764e6f0a3ed712ed9211b1d06ca.jpg",
409 | "inventory": 97,
410 | "masterName": "单眼 ",
411 | "price": 1400,
412 | "salesCount": 126,
413 | "score": 0,
414 | "slaveName": ""
415 | }],
416 | "slaveName": "你知道吗?电影设定小黄人是用香蕉泥做的",
417 | "supplierId": 10
418 | }, {
419 | "attrs": [],
420 | "defaultSkuId": 26,
421 | "displaySalesCount": 225,
422 | "id": 26,
423 | "isMember": 0,
424 | "masterName": "哆啦A梦挂饰款iPhone7/7P保护壳",
425 | "maxPrice": 7900,
426 | "minPrice": 7900,
427 | "options": null,
428 | "score": 7900,
429 | "skuList": [{
430 | "id": 26,
431 | "image": "http://pic.maizuo.com/manager/4ff1b04e704333ecffd56f1fdddd03b7.jpg",
432 | "inventory": 999,
433 | "masterName": "iPhone7 ",
434 | "price": 7900,
435 | "salesCount": 81,
436 | "score": 0,
437 | "slaveName": ""
438 | }],
439 | "slaveName": "叮叮当当的声音可萌啦",
440 | "supplierId": 5
441 | }, {
442 | "attrs": [],
443 | "defaultSkuId": 147,
444 | "displaySalesCount": 432,
445 | "id": 147,
446 | "isMember": 0,
447 | "masterName": "飞迪欧 魔镜3D眼镜",
448 | "maxPrice": 1580,
449 | "minPrice": 1580,
450 | "options": null,
451 | "score": 1580,
452 | "skuList": [{
453 | "id": 147,
454 | "image": "http://pic.maizuo.com/manager/3a0493107a4eff34e5f7c3e403027f29.jpg",
455 | "inventory": 968,
456 | "masterName": "黑色 ",
457 | "price": 1800,
458 | "salesCount": 432,
459 | "score": 0,
460 | "slaveName": ""
461 | }],
462 | "slaveName": "不夹头 、不眩晕、不闪烁、无辐射、不伤眼",
463 | "supplierId": 7
464 | }],
465 | "total": 358
466 | },
467 | "msg": "ok"
468 | }
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDom from "react-dom";
3 | import Router from "./router";
4 |
5 | ReactDom.render(
6 | ,
7 | document.querySelector("#app")
8 | )
--------------------------------------------------------------------------------
/src/router.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import {
3 | Router,
4 | Route,
5 | IndexRedirect,
6 | hashHistory
7 | } from "react-router";
8 | import {
9 | Provider
10 | } from "react-redux";
11 | import store from "./store";
12 |
13 | import App from "./components/App";
14 | import Home from "./components/home/Home";
15 | import Detail from "./components/home/MovieDetail";
16 | import Movie from "./components/movie/Movie";
17 | import Cinema from "./components/cinema/Cinema";
18 | import Shop from "./components/shop/Shop";
19 | import MovieList from "./components/movie/MovieList";
20 |
21 | const RouterConfig = () => (
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | )
39 | export default RouterConfig;
--------------------------------------------------------------------------------
/src/store/action.js:
--------------------------------------------------------------------------------
1 | export function tabNow() {
2 | return (dispatch) => {
3 | dispatch({
4 | type: "TAB_NOW"
5 | });
6 | dispatch({
7 | type: "CHANGE_NOW_PAGE",
8 | payload: 1
9 | });
10 | getData(1, "now-playing", function (data) {
11 | dispatch({
12 | type: "GET_NOW",
13 | payload: data
14 | })
15 | });
16 | }
17 | }
18 |
19 | export function tabComing() {
20 | return (dispatch) => {
21 | dispatch({
22 | type: "TAB_COMING"
23 | });
24 | dispatch({
25 | type: "CHANGE_COMING_PAGE",
26 | payload: 1
27 | });
28 | getData(1, "coming-soon", function (data) {
29 | dispatch({
30 | type: "GET_COMING",
31 | payload: data
32 | })
33 | });
34 | }
35 | }
36 |
37 | export function getMoreNow(pg) {
38 | return (dispatch) => {
39 | getData(pg, "now-playing", function (data) {
40 | dispatch({
41 | type: "GET_MORE_NOW",
42 | payload: data
43 | })
44 | });
45 | }
46 | }
47 | export function changeNowPage(p) {
48 | return (dispatch) => {
49 | dispatch({
50 | type: "CHANGE_NOW_PAGE",
51 | payload: p
52 | })
53 | }
54 | }
55 | export function getMoreComing(pg) {
56 | return (dispatch) => {
57 | getData(pg, "coming-soon", function (data) {
58 | dispatch({
59 | type: "GET_MORE_COMING",
60 | payload: data
61 | })
62 | });
63 | }
64 | }
65 | export function changeComingPage(p) {
66 | return (dispatch) => {
67 | dispatch({
68 | type: "CHANGE_COMING_PAGE",
69 | payload: p
70 | })
71 | }
72 | }
73 |
74 | function getData(pg, tp, cb) {
75 | fetch("/src/data/" + tp + "-" + pg + ".json").then((res) => {
76 | if (res.ok) {
77 | return res.json();
78 | } else {
79 | console.log("error");
80 | }
81 | }).then((data) => {
82 | cb(data.data.films);
83 | });
84 | }
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import {createStore, applyMiddleware } from "redux";
2 | import reducer from "./reducer";
3 | import thunk from "redux-thunk";
4 | import defaultState from "./state";
5 |
6 |
7 | const store = createStore(reducer, defaultState, applyMiddleware(thunk));
8 |
9 | export default store;
--------------------------------------------------------------------------------
/src/store/reducer.js:
--------------------------------------------------------------------------------
1 | import defaultState from "./state";
2 | const reducer = (state = defaultState, action) => {
3 | let {
4 | type,
5 | payload
6 | } = action;
7 | switch (type) {
8 | case "TOGGLE_NAV":
9 | if (state.navShow) {
10 | return Object.assign({}, state, {
11 | navShow: false
12 | });
13 | } else {
14 | return Object.assign({}, state, {
15 | navShow: true
16 | });
17 | }
18 | break;
19 | case "TAB_NOW":
20 | return Object.assign({}, state, {
21 | isNow: true,
22 | isComing: false
23 | });
24 | break;
25 | case "TAB_COMING":
26 | return Object.assign({}, state, {
27 | isNow: false,
28 | isComing: true
29 | });
30 | break;
31 | case "GET_NOW":
32 | return Object.assign({}, state, {
33 | nowList:payload
34 | });
35 | break;
36 | case "GET_COMING":
37 | return Object.assign({}, state, {
38 | comingList: payload
39 | });
40 | break;
41 | case "GET_MORE_NOW":
42 | return Object.assign({}, state, {
43 | nowList:state.nowList.concat(payload)
44 | });
45 | break;
46 | case "CHANGE_NOW_PAGE":
47 | return Object.assign({}, state, {
48 | nowPage:payload
49 | });
50 | break;
51 | case "GET_MORE_COMING":
52 | return Object.assign({}, state, {
53 | comingList: state.comingList.concat(payload)
54 | });
55 | break;
56 | case "CHANGE_COMING_PAGE":
57 | return Object.assign({}, state, {
58 | comingPage:payload
59 | });
60 | break;
61 | default:
62 | return state;
63 | break;
64 | }
65 | }
66 |
67 | export default reducer;
--------------------------------------------------------------------------------
/src/store/state.js:
--------------------------------------------------------------------------------
1 | const defaultState = {
2 | navShow:false,
3 | isNow:true,
4 | isComing:false,
5 | nowList:[],
6 | comingList:[],
7 | nowPage:1,
8 | comingPage:1
9 | }
10 |
11 | export default defaultState;
--------------------------------------------------------------------------------
/src/swipe.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Swipe 2.0
3 | *
4 | * Brad Birdsall
5 | * Copyright 2013, MIT License
6 | *
7 | */
8 |
9 | function Swipe(container, options) {
10 |
11 | "use strict";
12 |
13 | // utilities
14 | var noop = function() {}; // simple no operation function
15 | var offloadFn = function(fn) { setTimeout(fn || noop, 0) }; // offload a functions execution
16 |
17 | // check browser capabilities
18 | var browser = {
19 | addEventListener: !!window.addEventListener,
20 | touch: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,
21 | transitions: (function(temp) {
22 | var props = ['transitionProperty', 'WebkitTransition', 'MozTransition', 'OTransition', 'msTransition'];
23 | for ( var i in props ) if (temp.style[ props[i] ] !== undefined) return true;
24 | return false;
25 | })(document.createElement('swipe'))
26 | };
27 |
28 | // quit if no root element
29 | if (!container) return;
30 | var element = container.children[0];
31 | var slides, slidePos, width, length;
32 | options = options || {};
33 | var index = parseInt(options.startSlide, 10) || 0;
34 | var speed = options.speed || 300;
35 | options.continuous = options.continuous !== undefined ? options.continuous : true;
36 |
37 | function setup() {
38 |
39 | // cache slides
40 | slides = element.children;
41 | length = slides.length;
42 |
43 | // set continuous to false if only one slide
44 | if (slides.length < 2) options.continuous = false;
45 |
46 | //special case if two slides
47 | if (browser.transitions && options.continuous && slides.length < 3) {
48 | element.appendChild(slides[0].cloneNode(true));
49 | element.appendChild(element.children[1].cloneNode(true));
50 | slides = element.children;
51 | }
52 |
53 | // create an array to store current positions of each slide
54 | slidePos = new Array(slides.length);
55 |
56 | // determine width of each slide
57 | //alert(container.offsetWidth);
58 | width = container.getBoundingClientRect().width || container.offsetWidth;
59 | //alert(width);
60 | //width=document.documentElement.clientWidth;
61 |
62 | element.style.width = (slides.length * width) + 'px';
63 |
64 | // stack elements
65 | var pos = slides.length;
66 | while(pos--) {
67 |
68 | var slide = slides[pos];
69 |
70 | slide.style.width = width + 'px';
71 | slide.setAttribute('data-index', pos);
72 |
73 | if (browser.transitions) {
74 | slide.style.left = (pos * -width) + 'px';
75 | move(pos, index > pos ? -width : (index < pos ? width : 0), 0);
76 | }
77 |
78 | }
79 |
80 | // reposition elements before and after index
81 | if (options.continuous && browser.transitions) {
82 | move(circle(index-1), -width, 0);
83 | move(circle(index+1), width, 0);
84 | }
85 |
86 | if (!browser.transitions) element.style.left = (index * -width) + 'px';
87 |
88 | container.style.visibility = 'visible';
89 |
90 | }
91 |
92 | function prev() {
93 |
94 | if (options.continuous) slide(index-1);
95 | else if (index) slide(index-1);
96 |
97 | }
98 |
99 | function next() {
100 |
101 | if (options.continuous) slide(index+1);
102 | else if (index < slides.length - 1) slide(index+1);
103 |
104 | }
105 |
106 | function circle(index) {
107 |
108 | // a simple positive modulo using slides.length
109 | return (slides.length + (index % slides.length)) % slides.length;
110 |
111 | }
112 |
113 | function slide(to, slideSpeed) {
114 |
115 | // do nothing if already on requested slide
116 | if (index == to) return;
117 |
118 | if (browser.transitions) {
119 |
120 | var direction = Math.abs(index-to) / (index-to); // 1: backward, -1: forward
121 |
122 | // get the actual position of the slide
123 | if (options.continuous) {
124 | var natural_direction = direction;
125 | direction = -slidePos[circle(to)] / width;
126 |
127 | // if going forward but to < index, use to = slides.length + to
128 | // if going backward but to > index, use to = -slides.length + to
129 | if (direction !== natural_direction) to = -direction * slides.length + to;
130 |
131 | }
132 |
133 | var diff = Math.abs(index-to) - 1;
134 |
135 | // move all the slides between index and to in the right direction
136 | while (diff--) move( circle((to > index ? to : index) - diff - 1), width * direction, 0);
137 |
138 | to = circle(to);
139 |
140 | move(index, width * direction, slideSpeed || speed);
141 | move(to, 0, slideSpeed || speed);
142 |
143 | if (options.continuous) move(circle(to - direction), -(width * direction), 0); // we need to get the next in place
144 |
145 | } else {
146 |
147 | to = circle(to);
148 | animate(index * -width, to * -width, slideSpeed || speed);
149 | //no fallback for a circular continuous if the browser does not accept transitions
150 | }
151 |
152 | index = to;
153 | offloadFn(options.callback && options.callback(index, slides[index]));
154 | }
155 |
156 | function move(index, dist, speed) {
157 |
158 | translate(index, dist, speed);
159 | slidePos[index] = dist;
160 |
161 | }
162 |
163 | function translate(index, dist, speed) {
164 |
165 | var slide = slides[index];
166 | var style = slide && slide.style;
167 |
168 | if (!style) return;
169 |
170 | style.webkitTransitionDuration =
171 | style.MozTransitionDuration =
172 | style.msTransitionDuration =
173 | style.OTransitionDuration =
174 | style.transitionDuration = speed + 'ms';
175 |
176 | style.webkitTransform = 'translate(' + dist + 'px,0)' + 'translateZ(0)';
177 | style.msTransform =
178 | style.MozTransform =
179 | style.OTransform = 'translateX(' + dist + 'px)';
180 |
181 | }
182 |
183 | function animate(from, to, speed) {
184 |
185 | // if not an animation, just reposition
186 | if (!speed) {
187 |
188 | element.style.left = to + 'px';
189 | return;
190 |
191 | }
192 |
193 | var start = +new Date;
194 |
195 | var timer = setInterval(function() {
196 |
197 | var timeElap = +new Date - start;
198 |
199 | if (timeElap > speed) {
200 |
201 | element.style.left = to + 'px';
202 |
203 | if (delay) begin();
204 |
205 | options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);
206 |
207 | clearInterval(timer);
208 | return;
209 |
210 | }
211 |
212 | element.style.left = (( (to - from) * (Math.floor((timeElap / speed) * 100) / 100) ) + from) + 'px';
213 |
214 | }, 4);
215 |
216 | }
217 |
218 | // setup auto slideshow
219 | var delay = options.auto || 0;
220 | var interval;
221 |
222 | function begin() {
223 |
224 | interval = setTimeout(next, delay);
225 |
226 | }
227 |
228 | function stop() {
229 |
230 | delay = 0;
231 | clearTimeout(interval);
232 |
233 | }
234 |
235 |
236 | // setup initial vars
237 | var start = {};
238 | var delta = {};
239 | var isScrolling;
240 |
241 | // setup event capturing
242 | var events = {
243 |
244 | handleEvent: function(event) {
245 |
246 | switch (event.type) {
247 | case 'touchstart': this.start(event); break;
248 | case 'touchmove': this.move(event); break;
249 | case 'touchend': offloadFn(this.end(event)); break;
250 | case 'webkitTransitionEnd':
251 | case 'msTransitionEnd':
252 | case 'oTransitionEnd':
253 | case 'otransitionend':
254 | case 'transitionend': offloadFn(this.transitionEnd(event)); break;
255 | case 'resize': offloadFn(setup); break;
256 | }
257 |
258 | if (options.stopPropagation) event.stopPropagation();
259 |
260 | },
261 | start: function(event) {
262 |
263 | var touches = event.touches[0];
264 |
265 | // measure start values
266 | start = {
267 |
268 | // get initial touch coords
269 | x: touches.pageX,
270 | y: touches.pageY,
271 |
272 | // store time to determine touch duration
273 | time: +new Date
274 |
275 | };
276 |
277 | // used for testing first move event
278 | isScrolling = undefined;
279 |
280 | // reset delta and end measurements
281 | delta = {};
282 |
283 | // attach touchmove and touchend listeners
284 | element.addEventListener('touchmove', this, false);
285 | element.addEventListener('touchend', this, false);
286 |
287 | },
288 | move: function(event) {
289 |
290 | // ensure swiping with one touch and not pinching
291 | if ( event.touches.length > 1 || event.scale && event.scale !== 1) return
292 |
293 | if (options.disableScroll) event.preventDefault();
294 |
295 | var touches = event.touches[0];
296 |
297 | // measure change in x and y
298 | delta = {
299 | x: touches.pageX - start.x,
300 | y: touches.pageY - start.y
301 | }
302 |
303 | // determine if scrolling test has run - one time test
304 | if ( typeof isScrolling == 'undefined') {
305 | isScrolling = !!( isScrolling || Math.abs(delta.x) < Math.abs(delta.y) );
306 | }
307 |
308 | // if user is not trying to scroll vertically
309 | if (!isScrolling) {
310 |
311 | // prevent native scrolling
312 | event.preventDefault();
313 |
314 | // stop slideshow
315 | stop();
316 |
317 | // increase resistance if first or last slide
318 | if (options.continuous) { // we don't add resistance at the end
319 |
320 | translate(circle(index-1), delta.x + slidePos[circle(index-1)], 0);
321 | translate(index, delta.x + slidePos[index], 0);
322 | translate(circle(index+1), delta.x + slidePos[circle(index+1)], 0);
323 |
324 | } else {
325 |
326 | delta.x =
327 | delta.x /
328 | ( (!index && delta.x > 0 // if first slide and sliding left
329 | || index == slides.length - 1 // or if last slide and sliding right
330 | && delta.x < 0 // and if sliding at all
331 | ) ?
332 | ( Math.abs(delta.x) / width + 1 ) // determine resistance level
333 | : 1 ); // no resistance if false
334 |
335 | // translate 1:1
336 | translate(index-1, delta.x + slidePos[index-1], 0);
337 | translate(index, delta.x + slidePos[index], 0);
338 | translate(index+1, delta.x + slidePos[index+1], 0);
339 | }
340 |
341 | }
342 |
343 | },
344 | end: function(event) {
345 |
346 | // measure duration
347 | var duration = +new Date - start.time;
348 |
349 | // determine if slide attempt triggers next/prev slide
350 | var isValidSlide =
351 | Number(duration) < 250 // if slide duration is less than 250ms
352 | && Math.abs(delta.x) > 20 // and if slide amt is greater than 20px
353 | || Math.abs(delta.x) > width/2; // or if slide amt is greater than half the width
354 |
355 | // determine if slide attempt is past start and end
356 | var isPastBounds =
357 | !index && delta.x > 0 // if first slide and slide amt is greater than 0
358 | || index == slides.length - 1 && delta.x < 0; // or if last slide and slide amt is less than 0
359 |
360 | if (options.continuous) isPastBounds = false;
361 |
362 | // determine direction of swipe (true:right, false:left)
363 | var direction = delta.x < 0;
364 |
365 | // if not scrolling vertically
366 | if (!isScrolling) {
367 |
368 | if (isValidSlide && !isPastBounds) {
369 |
370 | if (direction) {
371 |
372 | if (options.continuous) { // we need to get the next in this direction in place
373 |
374 | move(circle(index-1), -width, 0);
375 | move(circle(index+2), width, 0);
376 |
377 | } else {
378 | move(index-1, -width, 0);
379 | }
380 |
381 | move(index, slidePos[index]-width, speed);
382 | move(circle(index+1), slidePos[circle(index+1)]-width, speed);
383 | index = circle(index+1);
384 |
385 | } else {
386 | if (options.continuous) { // we need to get the next in this direction in place
387 |
388 | move(circle(index+1), width, 0);
389 | move(circle(index-2), -width, 0);
390 |
391 | } else {
392 | move(index+1, width, 0);
393 | }
394 |
395 | move(index, slidePos[index]+width, speed);
396 | move(circle(index-1), slidePos[circle(index-1)]+width, speed);
397 | index = circle(index-1);
398 |
399 | }
400 |
401 | options.callback && options.callback(index, slides[index]);
402 |
403 | } else {
404 |
405 | if (options.continuous) {
406 |
407 | move(circle(index-1), -width, speed);
408 | move(index, 0, speed);
409 | move(circle(index+1), width, speed);
410 |
411 | } else {
412 |
413 | move(index-1, -width, speed);
414 | move(index, 0, speed);
415 | move(index+1, width, speed);
416 | }
417 |
418 | }
419 |
420 | }
421 |
422 | // kill touchmove and touchend event listeners until touchstart called again
423 | element.removeEventListener('touchmove', events, false)
424 | element.removeEventListener('touchend', events, false)
425 |
426 | },
427 | transitionEnd: function(event) {
428 |
429 | if (parseInt(event.target.getAttribute('data-index'), 10) == index) {
430 |
431 | if (delay) begin();
432 |
433 | options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);
434 |
435 | }
436 |
437 | }
438 |
439 | }
440 |
441 | // trigger setup
442 | setup();
443 |
444 | // start auto slideshow if applicable
445 | if (delay) begin();
446 |
447 |
448 | // add event listeners
449 | if (browser.addEventListener) {
450 |
451 | // set touchstart event on element
452 | if (browser.touch) element.addEventListener('touchstart', events, false);
453 |
454 | if (browser.transitions) {
455 | element.addEventListener('webkitTransitionEnd', events, false);
456 | element.addEventListener('msTransitionEnd', events, false);
457 | element.addEventListener('oTransitionEnd', events, false);
458 | element.addEventListener('otransitionend', events, false);
459 | element.addEventListener('transitionend', events, false);
460 | }
461 |
462 | // set resize event on window
463 | window.addEventListener('resize', events, false);
464 |
465 | } else {
466 |
467 | window.onresize = function () { setup() }; // to play nice with old IE
468 |
469 | }
470 |
471 | // expose the Swipe API
472 | return {
473 | setup: function() {
474 |
475 | setup();
476 |
477 | },
478 | slide: function(to, speed) {
479 |
480 | // cancel slideshow
481 | stop();
482 |
483 | slide(to, speed);
484 |
485 | },
486 | prev: function() {
487 |
488 | // cancel slideshow
489 | stop();
490 |
491 | prev();
492 |
493 | },
494 | next: function() {
495 |
496 | // cancel slideshow
497 | stop();
498 |
499 | next();
500 |
501 | },
502 | stop: function() {
503 |
504 | // cancel slideshow
505 | stop();
506 |
507 | },
508 | getPos: function() {
509 |
510 | // return current index position
511 | return index;
512 |
513 | },
514 | getNumSlides: function() {
515 |
516 | // return total number of slides
517 | return length;
518 | },
519 | kill: function() {
520 |
521 | // cancel slideshow
522 | stop();
523 |
524 | // reset element
525 | element.style.width = '';
526 | element.style.left = '';
527 |
528 | // reset slides
529 | var pos = slides.length;
530 | while(pos--) {
531 |
532 | var slide = slides[pos];
533 | slide.style.width = '';
534 | slide.style.left = '';
535 |
536 | if (browser.transitions) translate(pos, 0, 0);
537 |
538 | }
539 |
540 | // removed event listeners
541 | if (browser.addEventListener) {
542 |
543 | // remove current event listeners
544 | element.removeEventListener('touchstart', events, false);
545 | element.removeEventListener('webkitTransitionEnd', events, false);
546 | element.removeEventListener('msTransitionEnd', events, false);
547 | element.removeEventListener('oTransitionEnd', events, false);
548 | element.removeEventListener('otransitionend', events, false);
549 | element.removeEventListener('transitionend', events, false);
550 | window.removeEventListener('resize', events, false);
551 |
552 | }
553 | else {
554 |
555 | window.onresize = null;
556 |
557 | }
558 |
559 | }
560 | }
561 |
562 | }
563 |
564 |
565 | if ( window.jQuery || window.Zepto ) {
566 | (function($) {
567 | $.fn.Swipe = function(params) {
568 | return this.each(function() {
569 | $(this).data('Swipe', new Swipe($(this)[0], params));
570 | });
571 | }
572 | })( window.jQuery || window.Zepto )
573 | }
574 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | // webpack.config.js
2 | var path = require("path");
3 | var webpack = require('webpack');
4 | var ExtractTextPlugin = require("extract-text-webpack-plugin");
5 |
6 | module.exports = {
7 | entry: {
8 | bundle:['./src/index.js'],
9 | },
10 | output: {
11 | path: path.join(__dirname, 'build'),
12 | publicPath: "/build/",
13 | filename: '[name].js'
14 | },
15 | // 新添加的module属性
16 | module: {
17 | loaders: [
18 | { test: /\.jsx$/, exclude: /node_modules/, loader: 'jsx-loader!babel-loader' },
19 | { test: /\.js$/, exclude:/node_modules/, loader: 'babel-loader'},
20 | {test: /\.(jpg|png)$/, loader: "url?limit=8192"},
21 | {test: /\.css$/, loader: "style-loader!css-loader"}, // 把多个css压缩到一个css中。
22 | {test: /\.scss$/, loader: 'style!css!sass'}
23 | ]
24 | },
25 | babel: {
26 | presets: ["es2015", "react", "stage-2"]
27 | },
28 | devServer: { inline: true },
29 | plugins: [
30 | new webpack.optimize.CommonsChunkPlugin('common.js'),
31 | new ExtractTextPlugin("[name].css"),
32 | new webpack.HotModuleReplacementPlugin()
33 | ]
34 | };
--------------------------------------------------------------------------------