キーボード イベント
-
js
では通常、イベントをバインドしてキーのコードを取得し、## を event
#keyCode に渡します。 コードを取得するための属性
イベントをトリガーするために固定キーを実装する必要がある場合、常に判断する必要があり、実際には非常に面倒です-
let button = document.querySelector('button')
button.onkeyup = function (e) {
console.log(e.key)
if (e.keyCode == 13) {
console.log('我是回车键')
}
}
- vue
は、いくつかの一般的に使用されるキーのエイリアスを提供します。イベントの後に応答エイリアスを追加するだけです。
- vue
一般的なエイリアスは次のとおりです:
up/上矢印、
下/下矢印、
左/左矢印、
右/右矢印、
スペース/スペース、
tab/改行、
esc/exit、
enter/キャリッジリターン、
delete/削除
// 只有按下回车键时才会执行 send 方法
<input v-on:keyup.enter="send" type="text">
Vue- でエイリアスを提供しないキーの場合は、元の
key
値を使用してバインドできます。いわゆる key
値は ## です。 #event.key 取得値
key の値が 1 文字の場合はそのまま使用できますが、複数の単語で構成されるキャメルケース名の場合は、分割して - -
接続
<pre class="brush:php;toolbar:false">// 只有按下q键时才会执行send方法
<input v-on:keyup.Q="send" type="text">
// 只有按下capslock键时才会执行send方法
<input v-on:keyup.caps-lock="send" type="text"></pre>
システム修飾子の場合
ctrl、- alt
、
shift これらの比較 複雑なキーの使用には、2 つの状況があります。
これらのキーは、他のキーを押しながら組み合わせショートカット キーを形成することができるため、
トリガー イベントが次の場合- keydown
では、修飾キーを直接押してトリガーできます -
トリガーイベントが
keyup の場合、修飾キーを押すときに他のキーを同時に押してから放します他のキーを押すと、イベントをトリガーできます。 <pre class="brush:php;toolbar:false">// keydown事件时按下alt键时就会执行send方法
<input v-on:keydown.Alt="send" type="text">
// keyup事件时需要同时按下组合键才会执行send方法
<input v-on:keyup.Alt.y="send" type="text"></pre>
もちろん、
Vue.config.keyCodes を通じてキー エイリアス
- をカスタマイズすることもできます。カスタム キー名 = キー コード
Define-
<pre class="brush:php;toolbar:false">// 只有按下回车键时才会执行send方法
<input v-on:keydown.autofelix="send" type="text">
// 13是回车键的键码,将他的别名定义为autofelix
Vue.config.keyCodes.autofelix=13</pre>
画像プレビュー
プロジェクトでは画像プレビューを使用する必要がよくあります。
viewerjs は非常に優れた画像プレビュー プラグインです機能サポートには、画像の拡大、縮小、回転、ドラッグ、切り替え、ストレッチなどが含まれます。
インストール- viewerjs
拡張機能-
<pre class="brush:php;toolbar:false">npm install viewerjs --save</pre>
導入と設定機能
//引入
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>
カウントダウン-
カウントダウン手法には多くの用途がありますたとえば、急ぎで購入する商品が多い場合、ユーザーに思い出させるためにカウントダウンが必要です。ラッシュを開始する時間
- 実際には 1 秒おきです。時間を再計算して
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 + '天' + h + '时' + m + '分' + s + '秒'
},
//定时器没过1秒参数减1
Time() {
setInterval(() => {
this.seconds -= 1
this.countDown()
}, 1000)
},
}
})
</script>
</html>
カスタマイズされた右クリックに割り当てます。メニュー
プロジェクトでは、ブラウザのデフォルトの右クリック オプションではなく、マウスの右ボタンで表示されるオプションをカスタマイズする必要がある場合があります。右クリック オプションの実装方法
//引入
import Vue from 'vue';
import Contextmenu from "vue-contextmenujs"
Vue.use(Contextmenu);
使用できます- オプションにアイコンを追加できます
- 使用できます
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>
印刷機能
Web ページの印刷機能をサポートします。これも多くのプロジェクトで一般的です 使用するには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="'#printStart'">打印</button>
JSONP request
jsonp は、
クロスドメインの問題を解決するための主な方法の 1 つです。使用方法 を使用してデータをリクエストした後のコールバックは 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>
## にマウントする必要があります。 #【関連ビデオチュートリアルの推奨事項: vuejs エントリーのチュートリアル
、Web フロントエンドのエントリー
]