整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

“图片滑动样式”修改HTML教程

友们,下午好!

都说一张美美的图能为文章增色三分!

那如果是一个交互的图片样式 + 几张美美图呢?这能为文章增色多少呢?

比如这种(样式ID:90298)

使用这种样式,即能有效的展示图片,还能缩小文章空间,而且还与读者存在互动交互,想不想知道这种样式怎么做出来呢?

上面两种样式都可以在样式中心输入ID搜索到。

但是,样式中心的原样式,都是四张图片滑动的,直接进行换图就可以使用了。

但如果要像三儿上面做的两个样式,一个是5张图,一个是9张图,就要进HTML进行修改了。

教程一(带图片说明的样式)

进入到“HTML”模式,找到<section .........> </section>这段代码,先选择Ctrl+C复制。

然后在此段代码结尾处敲回车键换行,再选择Ctrl+V粘贴。

粘贴几次,样式就会在原有四张的基础上多出几张,胖友们可以根据自己的需求进行多次粘贴。

教程二

进入到“HTML”模式,找到<img src=........./>这段代码,先选择Ctrl+C复制,然后在此段代码结尾处,再Ctrl+V粘贴。

同上个样式,粘贴几次,样式就会在原有四张的基础上多出几张,胖友们可以根据自己的需求进行多次粘贴。

为了样式的美感,还是有三点建议给大家。

1、图片请保持尺寸一致。否则会导致图片层次不齐。

2、尺寸请500x500以上。否则可能会使图片不清楚。

3、图片大小尽可能小点。否则浏览时加载会不流畅。

更多好玩样式,请进样式中心搜索“滚动

好了,本次教程就到这里~bye



在前面

今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受。这么好的光阴怎么浪费,睡觉、吃饭、打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完。

这篇文章比较基础,在国庆期间的业余时间写的,这几天又完善了下,力求把更多的前端所涉及到的关于文件上传的各种场景和应用都涵盖了,若有疏漏和问题还请留言斧正和补充。

自测读不读

以下是本文所涉及到的知识点,break or continue ?

  • 文件上传原理
  • 最原始的文件上传
  • 使用 koa2 作为服务端写一个文件上传接口
  • 单文件上传和上传进度
  • 多文件上传和上传进度
  • 拖拽上传
  • 剪贴板上传
  • 大文件上传之分片上传
  • 大文件上传之断点续传
  • node 端文件上传

原理概述

原理很简单,就是根据 http 协议的规范和定义,完成请求消息体的封装和消息体的解析,然后将二进制内容保存到文件。

我们都知道如果要上传一个文件,需要把 form 标签的enctype设置为multipart/form-data,同时method必须为post方法。

那么multipart/form-data表示什么呢?

multipart互联网上的混合资源,就是资源由多种元素组成,form-data表示可以使用HTML Forms 和 POST 方法上传文件,具体的定义可以参考RFC 7578。

multipart/form-data 结构

看下 http 请求的消息体



  • 请求头:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryDCntfiXcSkPhS4PN 表示本次请求要上传文件,其中boundary表示分隔符,如果要上传多个表单项,就要使用boundary分割,每个表单项由———XXX开始,以———XXX结尾。

  • 消息体- Form Data 部分

每一个表单项又由Content-Type和Content-Disposition组成。

Content-Disposition: form-data 为固定值,表示一个表单元素,name 表示表单元素的 名称,回车换行后面就是name的值,如果是上传文件就是文件的二进制内容。

Content-Type:表示当前的内容的 MIME 类型,是图片还是文本还是二进制数据。

解析

客户端发送请求到服务器后,服务器会收到请求的消息体,然后对消息体进行解析,解析出哪是普通表单哪些是附件。

可能大家马上能想到通过正则或者字符串处理分割出内容,不过这样是行不通的,二进制buffer转化为string,对字符串进行截取后,其索引和字符串是不一致的,所以结果就不会正确,除非上传的就是字符串。

不过一般情况下不需要自行解析,目前已经有很成熟的三方库可以使用。

至于如何解析,这个也会占用很大篇幅,后面的文章在详细说。

最原始的文件上传

使用 form 表单上传文件

在 ie时代,如果实现一个无刷新的文件上传那可是费老劲了,大部分都是用 iframe 来实现局部刷新或者使用 flash 插件来搞定,在那个时代 ie 就是最好用的浏览器(别无选择)。

DEMO



这种方式上传文件,不需要 js ,而且没有兼容问题,所有浏览器都支持,就是体验很差,导致页面刷新,页面其他数据丢失。

HTML

 <form method="post" action="http://localhost:8100" enctype="multipart/form-data">

        选择文件:
            <input type="file" name="f1"/> input 必须设置 name 属性,否则数据无法发送<br/>
<br/>
            标题:<input type="text" name="title"/><br/><br/><br/>

        <button type="submit" id="btn-0">上 传</button>

</form>

复制代码

文件上传接口

服务端文件的保存基于现有的库koa-body结合 koa2实现服务端文件的保存和数据的返回。

在项目开发中,文件上传本身和业务无关,代码基本上都可通用。

在这里我们使用koa-body库来实现解析和文件的保存。

koa-body 会自动保存文件到系统临时目录下,也可以指定保存的文件路径。



然后在后续中间件内得到已保存的文件的信息,再做二次处理。

  • ctx.request.files.f1 得到文件信息,f1为input file 标签的 name
  • 获得文件的扩展名,重命名文件

NODE

/**
 * 服务入口
 */
var http = require('http');
var koaStatic = require('koa-static');
var path = require('path');
var koaBody = require('koa-body');//文件保存库
var fs = require('fs');
var Koa = require('koa2');

var app = new Koa();
var port = process.env.PORT || '8100';

var uploadHost= `http://localhost:${port}/uploads/`;

app.use(koaBody({
    formidable: {
        //设置文件的默认保存目录,不设置则保存在系统临时目录下  os
        uploadDir: path.resolve(__dirname, '../static/uploads')
    },
    multipart: true // 开启文件上传,默认是关闭
}));

//开启静态文件访问
app.use(koaStatic(
    path.resolve(__dirname, '../static') 
));

//文件二次处理,修改名称
app.use((ctx) => {
    var file = ctx.request.files.f1;//得道文件对象
    var path = file.path;
    var fname = file.name;//原文件名称
    var nextPath = path+fname;
    if(file.size>0 && path){
        //得到扩展名
        var extArr = fname.split('.');
        var ext = extArr[extArr.length-1];
        var nextPath = path+'.'+ext;
        //重命名文件
        fs.renameSync(path, nextPath);
    }
    //以 json 形式输出上传文件地址
    ctx.body = `{
        "fileUrl":"${uploadHost}${nextPath.slice(nextPath.lastIndexOf('/')+1)}"
    }`;
});

/**
 * http server
 */
var server = http.createServer(app.callback());
server.listen(port);
console.log('demo1 server start ......   ');
复制代码

CODE

https://github.com/Bigerfe/fe-learn-code/

vue使用scss、less切换主题(scss篇),进来就是赚到

**引言**

在Vue项目开发中,样式管理是至关重要的环节。SCSS作为一种CSS预处理器,以其强大的变量、嵌套、混入等特性深受开发者喜爱。本文将聚焦于如何在Vue项目中通过SCSS实现主题切换功能,助你轻松打造可定制化的Web应用界面。

## **一、搭建基于SCSS的Vue项目**

首先,我们需要在Vue CLI创建的项目中启用并配置SCSS支持。

### **1.1 创建Vue项目并安装相关依赖**

```bash

vue create my-project

cd my-project

npm install sass-loader node-sass -D

```

### **1.2 配置webpack处理SCSS文件**

打开或创建`vue.config.js`文件,并添加以下配置:

```javascript

module.exports = {

css: {

loaderOptions: {

scss: {

additionalData: `@import "@/styles/variables.scss"; // 引入全局变量文件`

}

}

}

};

```

这里引入了一个全局的`variables.scss`文件,用于存储主题相关的变量。

## **二、定义主题变量与组件样式**

### **2.1 定义主题变量**

在`src/styles/variables.scss`中定义基础主题颜色:

```scss

$primary-color: #007bff;

$secondary-color: #6c757d;

// ... 其他主题变量

```

### **2.2 组件中引用主题变量**

在组件的SCSS文件中,可以这样引用全局变量:

```scss

// src/components/MyComponent.vue

<style lang="scss">

.my-component {

background-color: $primary-color;

color: $secondary-color;

}

</style>

```

## **三、动态切换主题**

### **3.1 创建多个主题变量文件**

为了实现主题切换,我们可以创建多个主题变量文件,如`variables_dark.scss`和`variables_light.scss`。

### **3.2 在JavaScript中切换主题**

```javascript

// src/store/index.js 或者其他逻辑控制模块

import Vue from 'vue';

import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({

state: {

theme: 'light' // 初始主题为“亮色”

},

mutations: {

switchTheme(state, theme) {

state.theme = theme; // 更新主题状态

// 更改全局SCSS变量数据

const styleTag = document.createElement('style');

styleTag.innerHTML = `

@import '@/styles/variables_${state.theme}.scss';

`;

document.head.appendChild(styleTag);

}

},

actions: {

changeToDarkTheme({ commit }) {

commit('switchTheme', 'dark');

},

changeToLightTheme({ commit }) {

commit('switchTheme', 'light');

}

}

});

```

### **3.3 调用主题切换方法**

在需要触发主题切换的地方调用actions,例如在按钮点击事件中:

```html

<template>

<button @click="changeTheme">切换主题</button>

</template>

<script>

import { mapActions } from 'vuex';

export default {

methods: {

...mapActions(['changeToDarkTheme', 'changeToLightTheme']),


changeTheme() {

if (this.$store.state.theme === 'light') {

this.changeToDarkTheme();

} else {

this.changeToLightTheme();

}

}

}

};

</script>

```

## **四、进阶优化:动态注入SCSS变量**

由于上述方案每次切换主题都会创建新的`<style>`标签,效率并不理想。更优雅的方式是利用Webpack的插件实现动态替换CSS变量。

一种可行的方法是使用`webpack-theme-color-replacer-plugin`或者其他类似的插件,在编译阶段替换指定的CSS变量值,以达到动态切换主题的效果。

总结:

本文详细介绍了如何在Vue项目中利用SCSS实现主题切换功能,从定义主题变量、编写组件样式,再到通过Vuex管理主题状态以及JS操作DOM动态更改主题。虽然直接通过插入`<style>`标签的方式简单易懂,但实际生产环境中推荐采用Webpack插件进行更高效的变量替换。掌握这一技术,无疑将极大地提升你的Vue项目灵活性与用户体验。