WebApp

一、项目准备

  1. 项目结构
  • compnents文件夹 存放整个项目公共的组件 主要写的是功能和样式
  • assets文件夹 存放样式和字体图标
  • api文件夹 存放请求文件
  • pages文件夹存放项目页面
  • pages文件夹中没有个页面中conponents 存在的是页面级的公共组件 写的是html结构
    1、搭建环境
  • npm init 初始化项目
  • npm install --save-dev css-loader@4.2.1 style-loader@1.2.1 file-loader@6.0.0 url-loader@4.1.0 安装开发依赖
  • npm install art-template@4.13.2 swiper@6.1.1 安装线上依赖
  • "start": "webpack-dev-server --open chrome" 修改scripts属性值
  • 配置webpack.config.js文件
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

// 获取绝对路径
const resolve = dir => path.resolve(__dirname, dir);

module.exports = {
  mode: 'development',
  // Webpack 入口文件
  entry: {
    index: './src/pages/index',
    destination: './src/pages/destination'
  },
  // Webpack 输出路径
  output: {
    // 输出的目录
    path: resolve('dist'),
    // 输出的文件名
    filename: 'js/[name].js'
  },
  // source-map,调试用的,出错的时候,将直接定位到原始代码,而不是转换后的代码
  devtool: 'cheap-module-eval-source-map',
  resolve: {
    // 自动补全(可以省略)的扩展名
    extensions: ['.js'],
    // 路径别名
    alias: {
      api: resolve('src/api'),
      icons: resolve('src/assets/icons'),
      styles: resolve('src/assets/styles'),
      components: resolve('src/components'),
      pages: resolve('src/pages'),
      utils: resolve('src/utils')
    }
  },
  // 不同类型模块的处理规则
  module: {
    rules: [
      // css
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
      // 模板文件
      {
        test: /\.art$/,
        loader: 'art-template-loader'
      },
      // 图片
      {
        test: /\.(png|jpe?g|gif|svg)$/,
        loader: 'url-loader',
        options: {
          // 小于 10K 的图片转成 base64 编码的 dataURL 字符串写到代码中
          limit: 10000,
          // 其他的图片转移到
          name: 'images/[name].[ext]',
          esModule: false
        }
      },
      // 字体文件
      {
        test: /\.(woff2?|eot|ttf|otf)$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'fonts/[name].[ext]'
        }
      }
    ]
  },
  plugins: [
    // 自动将依赖注入 html 模板,并输出最终的 html 文件到目标文件夹
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: './src/pages/index/index.art',
      chunks: ['index']
    }),
    new HtmlWebpackPlugin({
      filename: 'destination.html',
      template: './src/pages/destination/destination.art',
      chunks: ['destination']
    })
  ]
};

二、项目开发相关的笔记

1、html/body添加overflow:hidden;属性是为了解决获取scrollTop属性值存在的兼容性问题,防止出现页面出现滚动条。
2、js中引入对应的css文件,然后在art中引入其他模板文件,最后在index.js引入对应的js文件
3、幻灯片

  • index/index.art文件中引入幻灯片art模板 (替换为loading组件实现加载效果)
  • index/slider/index.js文件中引入slider.css文件 以及swiper组件提供的css和js文件
  • index/index.js文件中引入幻灯片组件
  • 使用ajax获取数据
    • 引入slider.art模板
    • 引入api/getData.js模块
    • 获取index.art文件中的元素,然后替换innerHTML属性值。
    • 将获取的数据传给slider模板


      image.png

      image.png

4、tabbar组件

  • 使用原始模板语法,通过传递参数控制tabbar激活样式


    image.png

5、返回顶部组件

  • 通过添加删除一个特殊类,控制元素的隐藏和显示,默认是隐藏的
  • image.png
  • 滚动条滚过一个页面的高度window.innerHeight时,显示按钮

6、代码优化:将header组件和返回顶部组件功能相同的代码,提取出来,封装为一个公共类
7、目的地页

  • 引入公共的searchbox组件,通过传递参数placeholder设置提示文字
  • text-shadow ???
  • tab和content组件中定义各自的方法,在父组件中调用
  • tab组件中定义两个方法:
    (1)一个是根据索引添加对应的active类名,设置特殊样式;


(2)一个是根据索引发送数据请求,不处理获取的数据,直接将结果返回出去即可。


image.png
  • content组件中,定义两个个方法
    (1)将获取的数据中填充到模板中


    image.png

(2)没有获取到数据时,显示loading组件


image.png
  • main组件中,通过事件代理,左侧列表绑定点击事件,在获取数据填充到content模板之前,先调用loading组件,提升用户体验


    image.png
  • 由于每次切换都会发送请求,但由于请求是异步的,先发送的请求不一定先返回数据,所以可能会导致bug出现。
    解决方式:使用abort方法终止上一次请求。


    image.png
  • 使用sessionStorage做缓存
  • 返回顶部,滚动超出content组件可视区域高度scrollContainer.offsetHeight,显示按钮
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356