Weex学习

Weex导入图片

2017-06-16  本文已影响1520人  sweetpf

在Weex开发中不可避免的需要导入图片,在此介绍几种通用方法。

Weex图片资源存在形式?

1、每个客户端保存一份图片资源,统一命名。
2、图片资源保存在服务器上,在渲染Weex页面过程中异步下载图片。
3、保存在weex工程中。这样只需要一份保存,多端使用。

如何选择?

首先看公司氛围,如果客户端够统一,那么可以考虑第一种方式。当然,我推荐第2+第3种方式结合使用,对于图片资源小的图片保存在Weex工程中,方便多端统一,但是只限于较小图片资源,因为图片资源将会以base64的形式保存在打包后的bundlejs中,图片资源过大影响下载速度和解析,并且每次下载bundlejs都需要下载对应图片资源。大的图片资源保存在服务器上,需要的时候异步下载,一般都会有cache。

如何实现?

各端保存

在Vue中以file:///的形式添加,当然获取xcasset文件里面的资源需要麻烦点,网上很多介绍,自问度娘。

<image src="file:///filename">

服务器

在Vue中直接加载图片的地址

<image src="https://img.alicdn.com/tps/TB1z.55OFXXXXcLXXXXXXXXXXXX-560-560.jpg">

Weex工程

1、创建weex工程

weex init WeexImageDemo

2、拷贝图片到Weex工程中,Demo放在了./src下面,文件夹命名为resources
3、修改webpack,在loaders中添加image的模块

{
            test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
            loader: 'url',
            query: {
              limit: 300000,
              name: '[name].[ext]'
            }
 },

其中loader: 'url',表示模块命名, limit: 300000,表示图片资源的最大限制。都是可以自己修改。添加后的代码为:

loaders: [
        {
          test: /\.js$/,
          loader: 'babel',
          exclude: /node_modules/
        }, {
          test: /\.vue(\?[^?]+)?$/,
          loaders: []
        },{
            test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
            loader: 'url',
            query: {
              limit: 300000,
              name: '[name].[ext]'
            }
          },
      ]

4、修改package,在devDependencies中添加"url-loader",版本号自己设置,修改后如下:

"devDependencies": {
    "babel-core": "^6.20.0",
    "babel-loader": "^6.2.9",
    "babel-preset-es2015": "^6.18.0",
    "css-loader": "^0.26.1",
    "ip": "^1.1.4",
    "serve": "^1.4.0",
    "vue-loader": "^10.0.2",
    "vue-template-compiler": "^2.1.8",
    "webpack": "^1.14.0",
    "weex-devtool": "^0.2.64",
    "weex-loader": "^0.4.1",
    "weex-vue-loader": "^0.2.5",
    "url-loader": "^0.5.7"
  }

环境配置完成,下一步就是在Weex中使用,为了方便各个页面调用,将调用方式抽取出来,命名为config.js。
5、在config.js定义加载Weex工程图片方法

const SERVER = "YOUR SERVER IP";
module.exports = {
    // 加载工程中的image
    loadImage(imgName) {
        var image = require('./resources/'+imgName);
        return image;
    },
    // 加载服务器上的image
    image(imgURL) {
        return SERVER + imgURL;
    }
}

6、在foo的script导入config.js方法

import image from './config';

7、在foo中使用

<image class="airport-name-image" :src="imageLoader.loadImage('arrows_right@2x.png')"> </image>
        <image class="airport-name-image" :src="imageLoader.loadImage('ticket_order_notice@2x.png')"></image>

附上demo地址 https://github.com/flypan/loadWeexProjectImage.git

上一篇下一篇

猜你喜欢

热点阅读