欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

webpack中如何使用雪碧圖的示例代碼

 更新時間:2018年11月11日 10:38:48   作者:程序員小哥哥  
這篇文章主要介紹了webpack中如何使用雪碧圖的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、什么是雪碧圖?

CSS雪碧 即CSS Sprite,也有人叫它CSS精靈,是一種CSS圖像合并技術,該方法是將小圖標和背景圖像合并到一張圖片上,然后利用css的背景定位來顯示需要顯示的圖片部分。

二:為什么要用雪碧圖

結合我們公司的需求來說,因為有很多組件,每個組件下有大概50張圖片,每張圖片是一個請求,也就是發(fā)了300多個請求,這樣是很可怕的,所以為了優(yōu)化性能,減少http請求,決定采用雪碧圖的形式。

雪碧圖是將你想要的很多張圖片整理成一張圖片,然后通過background-*來進行圖片識別和定位來達到之前的效果。

三:如何使用雪碧圖

雪碧圖在之前有很多方式,如ps之類,現(xiàn)在最佳的方案還是在webpack-spritesmith。

我其實對webpack并不是很了解,我現(xiàn)在列出使用方法和我在使用webpack時候遇到的問題。

1.安裝

執(zhí)行命令行:npm install --save-dev webpack-spritesmith

2.在webpack.config.js中寫入

 var path = require('path')

 var SpritesmithPlugin = require('webpack-spritesmith')

 //自定義樣式
 var templateFunction = function (data) {
  var shared = '.ico { background-size: TWpx THpx }'
    .replace('TW', data.sprites[0].total_width / 2)
    .replace('TH', data.sprites[0].total_height / 2)

  var perSprite = data.sprites.map(function (sprite) {
    return '&.element-N {\n width: Wpx;\n height: Hpx;\n background-position: Xpx Ypx;\n}'
      .replace('N', sprite.name)
      .replace('W', sprite.width / 2)
      .replace('H', sprite.height / 2)
      .replace('X', sprite.offset_x / 2)
      .replace('Y', sprite.offset_y / 2)
      .replace('TW', sprite.total_width / 2)
      .replace('TH', sprite.total_height / 2)
  }).join('\n')

  return shared + '\n' + perSprite
 }

 module.exports = {
   ...
   module: {
     rules: [
       {test: /\.styl$/, use: [
         'style-loader',
         'css-loader',
         'stylus-loader'
       ]},
       {test: /\.png$/, use: [
         'file-loader?name=i/[hash].[ext]'
       ]}
     ]
   },
   resolve: {
     modules: ['node_modules', 'spritesmith-generated']
   },
   plugins: [
     new SpritesmithPlugin({
       src: { //引入路徑
         cwd: path.resolve(__dirname, 'src/images/ios/'),
         glob: '*.png'
       },
       target: { //輸出路徑
         image: path.resolve(__dirname, 'src/spritesmith-generated/ios.png'),
         css: [
          [path.resolve(__dirname, 'src/spritesmith-generated/sprite-1.css'), {
            format: 'function_based_template'
          }],
          [path.resolve(__dirname, 'src/spritesmith-generated/sprite-2.css'), {
            format: 'handlebars_based_template'
          }]
         ]
       },
       customTemplates: {
        'function_based_template': templateFunction, //自定義輸出什么樣的css樣式
       },
       apiOptions: {
         cssImageRef: 'ios.png'
       }
     })
   ]
 }

3.根據地址更改后執(zhí)行命令

wbpack

其實這樣已經滿足了大部分需求,根據需要將你所在的輸入和輸出地址進行更改即可,可以設置自己想要設置的的css(style-components、styl等),然后直接復制在自己的項目css文件,很有靈活性。

四:需要注意的點

我有的時候指定不同文件下的圖片合成一張雪碧圖,那該如何呢

例如我的需求是:

  • resources
    • ios
      • images
    • ant
      • images
    • ios
      • images
  • ...

翻譯: resources下有幾個文件夾(ios、ant、ios),相對應下面images文件夾放著各自對應的圖片。

需要注意下,它是支持glob的

src: { 
 //引入路徑
 cwd: path.resolve(__dirname, 'src/images/ios/'),
 glob: '*.png' //這里進行更改
},

這里可以參考在這里根據需求進行設置:http://www.globtester.com/

把glob改成

@(wechat|element|ios)/images/*.png

效果

五:更深層次的需求

我其實是想在各自的文件夾下的圖片,生成各自文件夾下的雪碧圖和css,那該如何實現(xiàn)呢,我寫了一部分,還沒有寫完,感覺遇到了技術難點,我呈現(xiàn)出代碼,會繼續(xù)優(yōu)化來實現(xiàn)

var path = require('path')
var SpritesmithPlugin = require('webpack-spritesmith')

var platforms = ['android', 'ant', 'element', 'ios', 'wechat']//, 'windows']

// var url = 'ant'
const TARGET = process.env.TARGET

console.log({ TARGET })

module.exports = [TARGET].map(l => {
 console.log(l)
 const url = l

 const fn = (data) => {
  console.log(url)
  var shared = 'background-size: TWpx THpx\n'
    .replace('TW', data.sprites[0].total_width / 2)
    .replace('TH', data.sprites[0].total_height / 2)

  var perSprite = data.sprites.map(function (sprite) {
    return `&.${url}-N {\n width: Wpx;\n height: Hpx;\n background-position: Xpx Ypx;\n}\n`
      .replace('N', sprite.name)
      .replace('W', sprite.width / 2)
      .replace('H', sprite.height / 2)
      .replace('X', sprite.offset_x / 2)
      .replace('Y', sprite.offset_y / 2)
      .replace('TW', sprite.total_width / 2)
      .replace('TH', sprite.total_height / 2)
  }).join('\n')

  return shared + '\n' + perSprite
 }

 return {
  module: {
    rules: [
      {test: /\.styl$/, use: [
        'style-loader',
        'css-loader',
        'stylus-loader'
      ]},
      {test: /\.png$/, use: [
        'file-loader?name=i/[hash].[ext]'
      ]}
    ]
  },
  entry: {
   [url]: path.join(__dirname, url),
  },
  output: {
   path: path.join(__dirname, '../parsed/', url),
   filename: '[name].css'
  },
  resolve: {
    modules: ['node_modules', 'spritesmith-generated']
  },
  plugins: [
    new SpritesmithPlugin({
      src: {
        cwd: path.resolve(__dirname, 'images/'+url+'/'),
        glob: '*.png' // '@(android|ant|element|ios|wechat|windows)/*.png'
      },
      target: {
        image: path.resolve(__dirname, '../parsed/'+url+'/'+url+'.png'),
        css: [
          [path.resolve(__dirname, '../parsed/'+url+'/'+url+'.css'), {
            format: 'function_based_template'
          }]
        ]
      },
      customTemplates: {
        'function_based_template': fn
      }
    })
  ]
 }
})

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

  • web前端開發(fā)也需要日志

    web前端開發(fā)也需要日志

    web前端開發(fā)過程中調試是一個不可避免的過程,我們有眾多的瀏覽器可供選擇,但是如果您要調試的平臺瀏覽器不是那么先進呢
    2010-12-12
  • JavaScript 更嚴格的相等 [譯]

    JavaScript 更嚴格的相等 [譯]

    大部分JavaScript程序員都知道:應該使用嚴格相等(===)來代替“普通”的相等操作(==).但是,有時候你的確需要一個比嚴格相等===更嚴格的運算符,比如說:在你想檢查某個值是否是NaN的時候,又或者你想區(qū)分-0和+0的時候.本文解釋了相關的知識以及ECMAScript.next中的解決辦法:“is”操作符
    2012-09-09
  • 小程序實現(xiàn)日歷左右滑動效果

    小程序實現(xiàn)日歷左右滑動效果

    這篇文章主要為大家詳細介紹了小程序實現(xiàn)日歷左右滑動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Boostrap柵格系統(tǒng)與自己額外定義的媒體查詢的沖突問題

    Boostrap柵格系統(tǒng)與自己額外定義的媒體查詢的沖突問題

    這篇文章主要介紹了Boostrap柵格系統(tǒng)與自己額外定義的媒體查詢的沖突問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 原生js實現(xiàn)放大鏡特效

    原生js實現(xiàn)放大鏡特效

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)放大鏡特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Bootstrap下拉菜單更改為懸停(hover)觸發(fā)的方法

    Bootstrap下拉菜單更改為懸停(hover)觸發(fā)的方法

    這篇文章主要為大家詳細介紹了Bootstrap下拉菜單更改為懸停(hover)觸發(fā)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 通過flv.js播放監(jiān)控示例深入探究直播流技術

    通過flv.js播放監(jiān)控示例深入探究直播流技術

    本文記錄一下在使用 flv.js 播放監(jiān)控視頻時踩過的各種各樣的坑,雖然官網給的?Getting Started?只有短短幾行代碼,跑一個能播視頻的 demo 很容易,但是播放時各種各樣的異常會搞到你懷疑人生,下面我將自己踩過的坑,以及踩坑過程中補充的相關知識,詳細總結一下
    2023-10-10
  • 前端JS可視化學習利用向量判斷多邊形邊界

    前端JS可視化學習利用向量判斷多邊形邊界

    這篇文章主要為大家介紹了前端JS可視化學習利用向量判斷多邊形邊界示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • javascript hasFocus使用實例

    javascript hasFocus使用實例

    hasFocus是document的特有方法.用來判斷當前網頁是否獲得焦點.
    2010-06-06
  • Javascript事件的捕獲方式和冒泡方式詳解

    Javascript事件的捕獲方式和冒泡方式詳解

    這篇文章主要為大家介紹了Javascript事件的捕獲方式和冒泡方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12

最新評論