>  기사  >  웹 프론트엔드  >  [정리와 공유] Vue 개발에 꼭 필요한 운영 스킬, 모아서 모아보세요!

[정리와 공유] Vue 개발에 꼭 필요한 운영 스킬, 모아서 모아보세요!

青灯夜游
青灯夜游앞으로
2022-07-21 20:13:191781검색

더 많은 기술을 습득할수록 Vue 프로그래밍 효율성이 높아집니다. 작업을 잘하려면 먼저 도구를 연마해야 합니다. 이 글은 여러분에게 필수적인 Vue 운영 기술을 공유할 것입니다. 여러분에게 도움이 되기를 바랍니다!

[정리와 공유] Vue 개발에 꼭 필요한 운영 스킬, 모아서 모아보세요!

(학습 영상 공유: vue 영상 튜토리얼)

키보드 이벤트

  • js에서는 일반적으로 이벤트를 바인딩하여 키 코드를 가져온 다음 event 속성에서 keyCode를 사용하여 키 코드를 가져옵니다. codejs 中我们通常通过绑定一个事件,去获取按键的编码,再通过 event 中的 keyCode 属性去获得编码
  • 如果我们需要实现固定的键才能触发事件时就需要不断的判断,其实很麻烦
let button = document.querySelector('button')

button.onkeyup = function (e) {
    console.log(e.key)
    if (e.keyCode == 13) {
        console.log('我是回车键')
    }
}
  • vue 中给一些常用的按键提供了别名,我们只要在事件后加上响应的别名即可
  • vue 中常见别名有:up/向上箭头down/向下箭头left/左箭头right/右箭头space/空格tab/换行esc/退出enter/回车delete/删除
// 只有按下回车键时才会执行 send 方法
<input v-on:keyup.enter="send" type="text">
  • 对于 Vue 中未提供别名的键,可以使用原始的 key 值去绑定,所谓 key 值就是 event.key 所获得的值
  • 如果 key 值是单个字母的话直接使用即可,如果是由多个单词组成的驼峰命名,就需要将其拆开,用 - 连接
// 只有按下q键时才会执行send方法
<input v-on:keyup.Q="send" type="text">

// 只有按下capslock键时才会执行send方法
<input v-on:keyup.caps-lock="send" type="text">
  • 对于系统修饰符 ctrlaltshift 这些比较复杂的键使用而言,分两种情况
  • 因为这些键可以在按住的同时,去按其他键,形成组合快捷键
  • 当触发事件为 keydown 时,我们可以直接按下修饰符即可触发
  • 当触发事件为 keyup 时,按下修饰键的同时要按下其他键,再释放其他键,事件才能被触发。
// keydown事件时按下alt键时就会执行send方法
<input v-on:keydown.Alt="send" type="text">

// keyup事件时需要同时按下组合键才会执行send方法
<input v-on:keyup.Alt.y="send" type="text">
  • 当然我们也可以自定义按键别名
  • 通过 Vue.config.keyCodes.自定义键名=键码 的方式去进行定义
// 只有按下回车键时才会执行send方法
<input v-on:keydown.autofelix="send" type="text">
    
// 13是回车键的键码,将他的别名定义为autofelix
Vue.config.keyCodes.autofelix=13

图片预览

  • 在项目中我们经常需要使用到图片预览,viewerjs 是一款非常炫酷的图片预览插件
  • 功能支持包括图片放大、缩小、旋转、拖拽、切换、拉伸等
  • 安装 viewerjs 扩展
npm install viewerjs --save
  • 引入并配置功能
//引入
import Vue from 'vue';
import 'viewerjs/dist/viewer.css';
import Viewer from 'v-viewer';

//按需引入
Vue.use(Viewer);

Viewer.setDefaults({
    'inline': true,
    'button': true, //右上角按钮
    "navbar": true, //底部缩略图
    "title": true, //当前图片标题
    "toolbar": true, //底部工具栏
    "tooltip": true, //显示缩放百分比
    "movable": true, //是否可以移动
    "zoomable": true, //是否可以缩放
    "rotatable": true, //是否可旋转
    "scalable": true, //是否可翻转
    "transition": true, //使用 CSS3 过度
    "fullscreen": true, //播放时是否全屏
    "keyboard": true, //是否支持键盘
    "url": "data-source",
    ready: function (e) {
        console.log(e.type, '组件以初始化');
    },
    show: function (e) {
        console.log(e.type, '图片显示开始');
    },
    shown: function (e) {
        console.log(e.type, '图片显示结束');
    },
    hide: function (e) {
        console.log(e.type, '图片隐藏完成');
    },
    hidden: function (e) {
        console.log(e.type, '图片隐藏结束');
    },
    view: function (e) {
        console.log(e.type, '视图开始');
    },
    viewed: function (e) {
        console.log(e.type, '视图结束');
        // 索引为 1 的图片旋转20度
        if (e.detail.index === 1) {
            this.viewer.rotate(20);
        }
    },
    zoom: function (e) {
        console.log(e.type, '图片缩放开始');
    },
    zoomed: function (e) {
        console.log(e.type, '图片缩放结束');
    }
})
  • 使用图片预览插件
  • 单个图片使用
<template>
  <div>
    <viewer>
      <img :src="cover" style="cursor: pointer;" height="80px">
    </viewer>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      cover: "//www.autofelix.com/images/cover.png"
    }
  }
}
</script>
  • 多个图片使用
<template>
  <div>
    <viewer :images="imgList">
      <img v-for="(imgSrc, index) in imgList" :key="index" :src="imgSrc" />
    </viewer>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      imgList: [
        "//www.autofelix.com/images/pic_1.png",
        "//www.autofelix.com/images/pic_2.png",
        "//www.autofelix.com/images/pic_3.png",
        "//www.autofelix.com/images/pic_4.png",
        "//www.autofelix.com/images/pic_5.png"
      ]
    }
  }
}
</script>

跑马灯

  • 这是一款好玩的特效技巧
  • 比如你在机场接人时,可以使用手机跑马灯特效,成为人群中最靓的仔
  • 跑马灯特效其实就是将最前面的文字删除,添加到最后一个,这样就形成了文字移动的效果
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>跑马灯</title>
    <style type="text/css">
        #app {
            padding: 20px;
        }
    </style>
</head>

<body>
    <div id="app">
        <button @click="run">应援</button>
        <button @click="stop">暂停</button>
        <h3>{{ msg }}</h3>
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.0/dist/vue.min.js"></script>
<script>
    new Vue({
        el: "#app",
        data: {
            msg: "飞兔小哥,飞兔小哥,我爱飞兔小哥~~~",
            timer: null // 定时器
        },
        methods: {
            run() {
                // 如果timer已经赋值就返回
                if (this.timer) return;

                this.timer = setInterval(() => {
                    // msg分割为数组
                    var arr = this.msg.split('');
                    // shift删除并返回删除的那个,push添加到最后
                    // 把数组第一个元素放入到最后面
                    arr.push(arr.shift());
                    // arr.join('')吧数组连接为字符串复制给msg
                    this.msg = arr.join('');
                }, 100)
            },
            stop() {
                //清除定时器
                clearInterval(this.timer);
                //清除定时器之后,需要重新将定时器置为null
                this.timer = null;
            }
        }
    })
</script>

</html>

倒计时

  • 对于倒计时技巧,应用的地方很多
  • 比如很多抢购商品的时候,我们需要有一个倒计时提醒用户开抢时间
  • 其实就是每隔一秒钟,去重新计算一下时间,并赋值到 DOM
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>倒计时</title>
</head>

<body>
    <div id="app">
        <div>抢购开始时间:{{count}}</div>
    </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.0/dist/vue.min.js"></script>
<script>
    new Vue({
        el: "#app",
        data() {
            return {
                count: '', //倒计时
                seconds: 864000 // 10天的秒数
            }
        },
        mounted() {
            this.Time() //调用定时器
        },
        methods: {
            // 天 时 分 秒 格式化函数
            countDown() {
                let d = parseInt(this.seconds / (24 * 60 * 60))
                d = d < 10 ? "0" + d : d
                let h = parseInt(this.seconds / (60 * 60) % 24);
                h = h < 10 ? "0" + h : h
                let m = parseInt(this.seconds / 60 % 60);
                m = m < 10 ? "0" + m : m
                let s = parseInt(this.seconds % 60);
                s = s < 10 ? "0" + s : s
                this.count = d + &#39;天&#39; + h + &#39;时&#39; + m + &#39;分&#39; + s + &#39;秒&#39;
            },
            //定时器没过1秒参数减1
            Time() {
                setInterval(() => {
                    this.seconds -= 1
                    this.countDown()
                }, 1000)
            },
        }
    })
</script>

</html>

自定义右键菜单

  • 在项目中,我们有时候需要自定义鼠标右键出现的选项,而不是浏览器默认的右键选项
  • 对于如何实现右键菜单,在 Vue 中其实很简单,只要使用 vue-contextmenujs 插件即可
  • 安装 vue-contextmenujs 插件
npm install vue-contextmenujs
  • 引入
//引入
import Vue from 'vue';
import Contextmenu from "vue-contextmenujs"

Vue.use(Contextmenu);
  • 使用方法
  • 可以使用 <i class="icon"></i> 可以给选项添加图标
  • 可以使用 style 标签自定义选项的样式
  • 可以使用 disabled 属性禁止选项可以点击
  • 可以使用 divided:true 设置选项的下划线
  • 可以使用 children 设置子选项
<style>
    .custom-class .menu_item__available:hover,
    .custom-class .menu_item_expand {
        background: lightblue !important;
        color: #e65a65 !important;
    }
</style>


<template>
    <div style="width:100vw;height:100vh" @contextmenu.prevent="onContextmenu"></div>
</template>

<script>
    import Vue from 'vue'
    import Contextmenu from "vue-contextmenujs"
    Vue.use(Contextmenu);

    export default {
        methods: {
            onContextmenu(event) {
                this.$contextmenu({
                    items: [
                        {
                            label: "返回",
                            onClick: () => {
                                // 添加点击事件后的自定义逻辑
                            }
                        },
                        { label: "前进", disabled: true },
                        { label: "重载", divided: true, icon: "el-icon-refresh" },
                        { label: "打印", icon: "el-icon-printer" },
                        {
                            label: "翻译",
                            divided: true,
                            minWidth: 0,
                            children: [{ label: "翻译成中文" }, { label: "翻译成英文" }]
                        },
                        {
                            label: "截图",
                            minWidth: 0,
                            children: [
                                {
                                    label: "截取部分",
                                    onClick: () => {
                                        // 添加点击事件后的自定义逻辑
                                    }
                                },
                                { label: "截取全屏" }
                            ]
                        }
                    ],
                    event, // 鼠标事件信息
                    customClass: "custom-class", // 自定义菜单 class
                    zIndex: 3, // 菜单样式 z-index
                    minWidth: 230 // 主菜单最小宽度
                });
                return false;
            }
        }
    };
</script>

打印功能

  • 对于网页支持打印功能,在很多项目中也比较常见
  • 而 Vue 中使用打印功能,可以使用 vue-print-nb 插件
  • 安装 vue-print-nb 插件
npm install vue-print-nb --save
  • 引入打印服务
import Vue from 'vue'
import Print from 'vue-print-nb'
Vue.use(Print);
  • 使用
  • 使用 v-print 指令即可启动打印功能
<div id="printStart">
    <p>红酥手,黄縢酒,满城春色宫墙柳。</p>
    <p>东风恶,欢情薄。</p>
    <p>一怀愁绪,几年离索。</p>
    <p>错、错、错。</p>
    <p>春如旧,人空瘦,泪痕红浥鲛绡透。</p>
    <p>桃花落,闲池阁。</p>
    <p>山盟虽在,锦书难托。</p>
    <p>莫、莫、莫!</p>
</div>
<button v-print="&#39;#printStart&#39;">打印</button>

JSONP请求

  • jsonp解决跨域 的主要方式之一
  • 所以学会在 vue 中使用 jsonp 其实还是很重要的
  • 安装 jsonp 扩展
npm install vue-jsonp --save-dev
  • 注册服务
// 在vue2中注册服务
import Vue from 'vue'
import VueJsonp from 'vue-jsonp'
Vue.use(VueJsonp)

// 在vue3中注册服务
import { createApp } from 'vue'
import App from './App.vue'
import VueJsonp from 'vue-jsonp'
createApp(App).use(VueJsonp).mount('#app')
  • 使用方法
  • 需要注意的是,在使用 jsonp 请求数据后,回调并不是在 then 中执行
  • 而是在自定义的 callbackName 中执行,并且需要挂载到 window
  • 이벤트를 트리거하기 위해 고정된 키를 구현해야 하는 경우 지속적으로 판단해야 하는데 이는 실제로 매우 번거로운 일입니다

<script>
export default {
  data() {...},
  created() {
    this.getUserInfo()
  },
  mounted() {
    window.jsonpCallback = (data) => {
        // 返回后回调
        console.log(data)
    }
  },
  methods: {
    getUserInfo() {
     this.$jsonp(this.url, {
      callbackQuery: "callbackParam",
      callbackName: "jsonpCallback"
     })
      .then((json) => {
          // 返回的jsonp数据不会放这里,而是在 window.jsonpCallback
          console.log(json)
      })  
    }
  }
 }
</script>
vue는 일반적으로 사용되는 일부 키에 대한 별칭을 제공합니다. 이벤트 뒤에 응답 별칭을 추가합니다. vue의 일반적인 별칭은 위쪽/위쪽 화살표, 아래쪽/아래쪽 화살표, left/입니다. 왼쪽 화살표, 오른쪽/오른쪽 화살표, 공백/공백, 탭/줄 바꿈, esc/Exit code>, <code>enter/Enter, delete/Deleterrreee🎜 Vue에서 별칭을 제공하지 않는 키의 경우 다음을 사용할 수 있습니다. 바인딩할 원래 key 값 소위 key 값은 event.key🎜🎜If key 에서 얻은 값입니다. code> 값이 한 글자이면 바로 사용 가능합니다. 여러 단어로 구성된 카멜케이스 이름이라면 분리해서 <code>-로 연결해야 합니다 🎜🎜rrreee🎜🎜 시스템 수정의 경우 ctrl, altshift와 같은 더 복잡한 키를 사용하는 경우 두 가지 상황이 있습니다🎜🎜 이러한 키는 길게 누르기 동시에 다른 키를 눌러 조합 단축키를 형성하세요🎜🎜트리거 이벤트가 keydown일 때 수정자를 직접 눌러 트리거할 수 있습니다🎜🎜트리거 이벤트가 keyup 수정자 키를 누를 때 이벤트가 트리거되기 전에 다른 키를 동시에 누른 다음 다른 키를 놓아야 합니다. 🎜🎜rrreee🎜🎜물론 키 별칭도 맞춤 설정할 수 있습니다🎜🎜 Vue.config.keyCodes를 통해 맞춤 키 이름 = 키 코드를 통해 정의할 수 있습니다🎜🎜rrreee

이미지 미리보기🎜🎜🎜프로젝트에서 이미지 미리보기를 사용해야 하는 경우가 많습니다. viewerjs는 매우 멋진 이미지 미리보기 플러그인입니다.🎜🎜이미지 확대, 축소, 회전, 드래그, 전환 등의 기능 지원 🎜🎜viewerjs 확장 설치 🎜🎜rrreee🎜🎜기능 소개 및 구성 🎜🎜rrreee🎜🎜이미지 미리보기 플러그인 사용 🎜🎜단일 이미지에 사용🎜🎜rrreee 🎜🎜 여러 장의 사진을 활용하세요🎜🎜rrreee

Marquee🎜🎜🎜재미있는 특수효과 기법입니다🎜🎜예를 들어 공항에서 사람을 태울 때 Marquee를 사용할 수 있습니다. 군중 속에서 가장 잘생긴 소년이 되기 위한 휴대폰의 특수 효과🎜🎜천막 특수 효과는 실제로 첫 번째 텍스트를 삭제하고 마지막 텍스트에 추가하여 텍스트 이동 효과를 형성하는 것입니다🎜🎜rrreee

카운트다운🎜 🎜🎜카운트다운 기술을 적용할 수 있는 응용 프로그램은 많습니다🎜🎜예를 들어 제품을 구매하려는 사람이 많을 때 사용자에게 서두르기 시작하도록 상기시키는 카운트다운이 필요합니다🎜🎜 실제로 🎜🎜rrreee

오른쪽 클릭 메뉴 사용자 정의🎜🎜🎜에서 1초마다 시간을 다시 계산하여 DOM에 할당한다는 의미입니다. 프로젝트를 진행하다 보면 브라우저 기본값 대신 마우스 오른쪽 버튼으로 나타나는 옵션을 맞춤 설정해야 할 때가 있습니다. 마우스 오른쪽 버튼 클릭 옵션🎜🎜오른쪽 클릭 메뉴를 구현하는 방법은 실제로 Vue에서 매우 간단합니다. 그냥 vue-contextmenujs 플러그인을 사용하세요🎜🎜vue-contextmenujs 플러그인 설치 🎜🎜rrreee🎜🎜Introduction🎜🎜rrreee🎜🎜사용 방법🎜🎜할 수 있습니다 옵션에 아이콘을 추가하려면 <i class="icon"></i>를 사용하세요🎜🎜 style 태그를 사용하여 옵션 스타일을 맞춤설정할 수 있습니다 🎜🎜disabled 속성을 ​​사용하여 옵션을 비활성화하고 클릭할 수 있습니다🎜🎜divided:true를 사용하여 Underline 옵션을 설정할 수 있습니다🎜🎜를 사용할 수 있습니다 children 하위 옵션 설정🎜🎜rrreee

인쇄 기능🎜🎜🎜 많은 프로젝트에서 흔히 볼 수 있는 웹페이지 인쇄 기능을 지원합니다🎜 🎜인쇄 기능을 사용하려면 Vue에서 기능을 사용하려면 vue-print-nb 플러그인을 사용할 수 있습니다🎜🎜vue-print-nb 플러그인을 설치하세요🎜🎜rrreee🎜🎜인쇄 소개 service🎜🎜rrreee 🎜🎜Use🎜🎜v-print 명령을 사용하여 인쇄 기능을 시작하세요🎜🎜rrreee

JSONP 요청🎜🎜🎜 jsonp 이는 도메인 간 문제를 해결하는 주요 방법 중 하나입니다🎜🎜따라서 vue에서 <code>jsonp를 사용하는 방법을 배우는 것이 실제로 매우 중요합니다. 🎜🎜jsonp 확장 설치🎜🎜rrreee🎜🎜등록 서비스🎜🎜rrreee🎜🎜사용 방법🎜🎜jsonp를 사용하여 요청한 후에는 주의해야 합니다. 데이터인 경우 콜백은 then에 없습니다 🎜🎜 대신 사용자 정의 callbackName에서 실행되며 window 개체에 마운트되어야 합니다 🎜 🎜rrreee🎜【관련 동영상 튜토리얼 추천: 🎜 Vuejs 입문 튜토리얼🎜、🎜웹 프론트엔드 시작하기🎜】🎜

위 내용은 [정리와 공유] Vue 개발에 꼭 필요한 운영 스킬, 모아서 모아보세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제