图书馆网站建设请示电商主题wordpress
目录
- 前言
- 1 项目准备
- 1.1 创建项目目录
- 1.2 搭建项目开发环境
- 2 项目组件化
- 2.1 在当前环境启动原有项目
- 2.2 顶部组件
- 2.3 幻灯片组件
- 2.4 机酒自由行组件
- 2.5 拆分余下的css文件
- 3 项目完善
- 3.1 幻灯片组件
- 3.1.1 结构和样式
- 3.1.2 功能实现
- 3.1.3 使用Ajax获取数据
- 3.1.4 加载中组件
- 3.2 机酒自由行组件
- 4 源码
前言
-
在现代Web开发中,组件化设计是一种常见的开发模式,它有助于提高代码的可维护性、可重用性和可测试性。
-
通过将一个大型应用程序拆分为多个独立的组件,我们可以更加灵活地开发和维护网站。
-
本文将以慕云游首页为例,探讨如何通过组件化设计实现它的页面布局与交互功能。
-
前置知识:
HTML CSS JavaScript webpack art-template
慕云游静态项目
1 项目准备
1.1 创建项目目录

- 放入提前准备的文件,如封装的ajax
1.2 搭建项目开发环境
-
初始化项目
在项目所在文件夹打开命令行,输入:npm init -
安装项目所需的包(node模块):
- webpack
npm install --save-dev webpack webpack-cli- art-template
npm install art-template -
配置
webpack:
创建webpack.config.json文件,具体配置内容见Babel编译与Webpack
2 项目组件化
2.1 在当前环境启动原有项目
-
将原项目的文件,复制到Mall项目的
src/page/index目录下

-
将原项目中的
index.html文件改为index.art,当作模板文件

-
在
src/pages/index目录下创建入口文件index.js,用于放引入的css文件和js文件,因为webpack无法直接从模板文件中访问他们

//css import './css/bundle.css'; import './css/reset.css';// js import './js/backtotop'; import './js/menu'; import './js/carousel'; -
在命令行输入
npm start运行项目,看到完整页面即可
2.2 顶部组件
-
在
src/components/topbar目录下创建以下文件

-
在入口文件
index.js中引入topbar.js//组件 import 'components/topbar'; -
将
index.art文件中topbar内容剪切到topbar.art中

-
在
index.art文件中引入topbar.art模板

-
同样的,相关的css内容剪切到
topbar.css文件中,并在同目录下的index.js中引入topbar.css//css import './topbar.css' -
这个时候我们会发现
css中图片路径报错了

-
icon.png里是精灵图标,很多地方都共用,我们可以将icons.png放在公共资源src/assert/images中,再更改url
background: url(images/icons.png) 0 -10px; -
在
webpack.config.json中已配置images为src/assets/images的路径别名
-
2.3 幻灯片组件
按2.1顶部组件步骤如法炮制
-
在
src/pages/index/components/carousel目录下,创建以下文件,再将原文件内容拆分搬运到相应文件中

-
注意: 顶部组件在布局组件中
src/components/topbar,幻灯片组件在页面组件中src/pages/index/components/carousel,在入口文件中引入js的路径不同//组件 import 'components/topbar'; import './components/carousel';
2.4 机酒自由行组件
同 2.1顶部组件操作一致,但是有个特殊的点类
- 机酒自由行中的css样式都是公共样式,所以要放在公共资源目录
src/asserts/styles下-
创建
layout.css文件,将jjzyx.css中的代码剪切进去,同时删除jjzyx.css文件

-
在入口文件
index.js中引入layout.css//公共样式 import 'styles/layout.css';
-
2.5 拆分余下的css文件
-
将公共的基础样式(如下),放入
src/asserts/styles下base.css中body {color: #1C1F21; } a {text-decoration: none;color: #1C1F21; } @font-face {font-family: "PingFangSCRegular";/* IE9 */src: url('../fonts/PingFangSCRegular.ttf?t=1583684254005') format('truetype'); } @font-face {font-family: 'iconfont';src: url('../fonts/iconfont.eot');src: url('../fonts/iconfont.eot?#iefix') format('embedded-opentype'), url('../fonts/iconfont.woff2') format('woff2'), url('../fonts/iconfont.woff') format('woff'), url('../fonts/iconfont.ttf') format('truetype'), url('../fonts/iconfont.svg#iconfont') format('svg'); } .iconfont {font-family: "iconfont" !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale; } .center-wrap {width: 1152px;height: 100%;margin: 0 auto;position: relative; }-
把原文件中fonts文件夹中的字体图标都移到公共的
fonts中

-
在入口文件
index.js中引入base.css//公共样式 import './styles/base.css';
-
-
将
reset.css也放入公共样式中

-
改变
reset.css在入口文件中的路径//css //import './css/reset.css'; //公共样式 import './styles/reset.css';
-
-
找到
bundle.css中所有的公共样式,都剪切到layout.css中 ,再一步步按功能拆分成更多的css组件,最终将bundle.css中的内容搬空.
3 项目完善
3.1 幻灯片组件
3.1.1 结构和样式
-
在
src/pages/index/components目录下创建新组件slider,内部创建art、css、js文件,设置幻灯片的结构样式,并将carousel组件下images文件夹复制到slider组件中.

-
将
slider应用到index.art中,替换carousel;同样的,入口文件中也要替换// {{include './components/carousel/carousel.art'}}{{include './components/slider/slider.art'}}// import './components/carousel';import './components/slider';
3.1.2 功能实现
-
在
slider组件下创建module模块,用于存放各种功能的js文件,实现走马灯效果
`- base.js
import { ELEMENT_NODE_TYPE, SLIDER_ANIMATION_CLASS_NAME } from './constants'; import DEFAULTS from './defaults'; export default BaseSlider; - constants.js
// keyboard export const LEFT_KEYCODE = 37; export const RIGHT_KEYCODE = 39;// base export const ELEMENT_NODE_TYPE = 1; export const SLIDER_ANIMATION_CLASS_NAME = 'slider-animation'; - defaults.js
export default DEFAULTS; - index.js
import BaseSlider from './base.js'; import keyboard from './keyboard.js'; export default Slider; - keyboard.js
import { LEFT_KEYCODE, RIGHT_KEYCODE } from './constants.js'; export default keyboard; - slider/index.js
import Slider from './module';
- base.js
-
在
silder组件下创建按钮的模板文件btn.art,和样式文件btn.css,对左右按钮定位,并在对应js文件中绑定点击事件

- slider/index.js
import './btn.css';
- slider/index.js
3.1.3 使用Ajax获取数据
-
在
src/api目录下新建getData.js文件,封装获取数据的函数getData() -
在
getData.js中导入ajax文件中需要用到的方法import { getJSON } from './ajax'; -
将源码中的数字,放在新建的
config.js文件中,当做配置,方便定位更改

-
config.js
export const SUCC_CODE = 200; export const TIMEOUT = 30000; -
getData.js
import { SUCC_CODE, TIMEOUT } from './config'; -
slider/index.js
import render from './slider.art'; import { getData, getDelayedData } from 'api/getData';
-
3.1.4 加载中组件
-
在
src/components目录下新建加载中组件loading,内部创建模板文件,并进行简单布局,加入所需的资源

-
index.art

-
将接口地址封装起来,新建
config.js文件,方便替换.-
slider/config.js
export const URL ='https://www.imooc.com/api/mall-PC/index/slider?icode=J6DDC8E3E7A8BF54C'; -
slider/index.js
import { URL } from './config';
-
3.2 机酒自由行组件
4 源码
网盘链接:https://pan.baidu.com/s/1PElIjlZpepRxaY6g8ChsVQ
提取码:dpq1
未完待续…
