您的当前位置:首页怎样使用Vue实现倒计时按钮
广告

怎样使用Vue实现倒计时按钮

2023-11-29 来源:酷申汽车网
这次给大家带来怎样使用Vue实现倒计时按钮,使用Vue实现倒计时按钮的注意事项有哪些,下面就是实战案例,一起来看一下。

在项目开发里,我们经常会遇到发送验证码、点击了之后有60秒倒计时的按钮,很常见却也很简单,但是在写这个按钮的时候有个别地方还要注意下,今天写出来,如有问题欢迎指正!

完成的效果如下:

为了更快显示出效果,我把时间设成了5秒。按钮在点击之后会出现倒计时,同时按钮变为不可点击状态,样式也发生变化,鼠标悬浮上的样子也会发生变化。

接下来我们用代码来实现:

<button class="button" @click="countDown"> {{content}}</button>...data () { return { content: '发送验证码', // 按钮里显示的内容 totalTime: 60 //记录具体倒计时时间 }},methods: { countDown() { let clock = window.setInterval(() => { this.total-- this.content = this.total + 's后重新发送' },1000) }}

在data里加了两条数据,一条用来记录时间,一条用来盛放倒计时按钮的具体内容。在countDown函数里我们用了setInterval定时器,每隔一秒totalTime减1,同时更改按钮里显示的内容。 在window.setInterval里用了箭头函数,因为它会自动绑定外面的this,所以就不用先存下this了。

效果如下图:

但是这个按钮还有一些问题:

点击了按钮之后过了1秒就直接从59秒开始倒计时了,中间的60不见了倒计时的时候还可以点击还没有清除倒计时

接下来需要继续完善countDown函数来解决这些问题。

countDown () { this.content = this.totalTime + 's后重新发送' //这里解决60秒不见了的问题 let clock = window.setInterval(() => { this.totalTime-- this.content = this.totalTime + 's后重新发送' if (this.totalTime < 0) { //当倒计时小于0时清除定时器 window.clearInterval(clock) this.content = '重新发送验证码' this.totalTime = 60 } },1000)},

上面的代码解决了60不见的问题,同时当totalTime小于0时清除同时器、重新设置按钮里的content、将totalTime重置为60以便下次使用。

倒计10秒的效果:

发现bug,多次点击之后,倒讲时速度变快,这是因为每次点击都会启动一个setInterval,这些setInterval都会减少totalTime。解决的方法也很简单:简单节流一下就好了,就是第一次点击按钮之后让countDonw这个函数的代码不可执行,等到倒计时结束之后才可以再次执行。

data () { return { content: '发送验证码', totalTime: 10, canClick: true //添加canClick }}...countDown () { if (!this.canClick) return //改动的是这两行代码 this.canClick = false this.content = this.totalTime + 's后重新发送' let clock = window.setInterval(() => { this.totalTime-- this.content = this.totalTime + 's后重新发送' if (this.totalTime < 0) { window.clearInterval(clock) this.content = '重新发送验证码' this.totalTime = 10 this.canClick = true //这里重新开启 } },1000)}

在data里添加canClick,默认是true,如果canClick为true,countDown里的代码可以执行,如果是false就不行。每执行一次就将canClick设为false,而只在倒计时结束的时候再改为true。这样刚才的问题就没有了。

到这里其实就差不多了,不过还可以调整下样式:

<button class="button" :class="{disabled: !this.canClick}" @click="countDown">....disabled{ background-color: #ddd; border-color: #ddd; color:#57a3f3; cursor: not-allowed; // 鼠标变化}

效果:

这个倒计时按钮十分简单,但是我第一次写的时候还是写的很乱,而且那个时候还不知道函数节流的概念。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

怎样利用Vue写一个双向数据绑定

怎样使用Vue实现proxy代理

小编还为您整理了以下内容,可能对您也有帮助:

怎样使用Vue实现倒计时按钮

这次给大家带来怎样使用Vue实现倒计时按钮,使用Vue实现倒计时按钮的注意事项有哪些,下面就是实战案例,一起来看一下。

在项目开发里,我们经常会遇到发送验证码、点击了之后有60秒倒计时的按钮,很常见却也很简单,但是在写这个按钮的时候有个别地方还要注意下,今天写出来,如有问题欢迎指正!

完成的效果如下:

为了更快显示出效果,我把时间设成了5秒。按钮在点击之后会出现倒计时,同时按钮变为不可点击状态,样式也发生变化,鼠标悬浮上的样子也会发生变化。

接下来我们用代码来实现:

<button class="button" @click="countDown">

{{content}}

</button>

...

data () {

return {

content: '发送验证码', // 按钮里显示的内容

totalTime: 60 //记录具体倒计时时间

}

},

methods: {

countDown() {

let clock = window.setInterval(() => {

this.total--

this.content = this.total + 's后重新发送'

},1000)

}

}在data里加了两条数据,一条用来记录时间,一条用来盛放倒计时按钮的具体内容。在countDown函数里我们用了setInterval定时器,每隔一秒totalTime减1,同时更改按钮里显示的内容。 在window.setInterval里用了箭头函数,因为它会自动绑定外面的this,所以就不用先存下this了。

效果如下图:

但是这个按钮还有一些问题:

点击了按钮之后过了1秒就直接从59秒开始倒计时了,中间的60不见了

倒计时的时候还可以点击

还没有清除倒计时

接下来需要继续完善countDown函数来解决这些问题。

countDown () {

this.content = this.totalTime + 's后重新发送' //这里解决60秒不见了的问题

let clock = window.setInterval(() => {

this.totalTime--

this.content = this.totalTime + 's后重新发送'

if (this.totalTime < 0) { //当倒计时小于0时清除定时器

window.clearInterval(clock)

this.content = '重新发送验证码'

this.totalTime = 60

}

},1000)

},上面的代码解决了60不见的问题,同时当totalTime小于0时清除同时器、重新设置按钮里的content、将totalTime重置为60以便下次使用。

倒计10秒的效果:

发现bug,多次点击之后,倒讲时速度变快,这是因为每次点击都会启动一个setInterval,这些setInterval都会减少totalTime。解决的方法也很简单:简单节流一下就好了,就是第一次点击按钮之后让countDonw这个函数的代码不可执行,等到倒计时结束之后才可以再次执行。

data () {

return {

content: '发送验证码',

totalTime: 10,

canClick: true //添加canClick

}

}

...

countDown () {

if (!this.canClick) return //改动的是这两行代码

this.canClick = false

this.content = this.totalTime + 's后重新发送'

let clock = window.setInterval(() => {

this.totalTime--

this.content = this.totalTime + 's后重新发送'

if (this.totalTime < 0) {

window.clearInterval(clock)

this.content = '重新发送验证码'

this.totalTime = 10

this.canClick = true //这里重新开启

}

},1000)

}在data里添加canClick,默认是true,如果canClick为true,countDown里的代码可以执行,如果是false就不行。每执行一次就将canClick设为false,而只在倒计时结束的时候再改为true。这样刚才的问题就没有了。

到这里其实就差不多了,不过还可以调整下样式:

<button class="button" :class="{disabled: !this.canClick}" @click="countDown">

...

.disabled{

background-color: #ddd;

border-color: #ddd;

color:#57a3f3;

cursor: not-allowed; // 鼠标变化

}效果:

这个倒计时按钮十分简单,但是我第一次写的时候还是写的很乱,而且那个时候还不知道函数节流的概念。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

怎样利用Vue写一个双向数据绑定

怎样使用Vue实现proxy代理

让按钮显示倒计时10秒以后才能点击确定

<script language="javascript">

<!--

var i = 10;

if (i > 0){

setInterval('num(1)',1000);

}

function num(n){

i = i - n;

if(i > 0){

document.getElementById("button").innerHTML = "<input type='button' disabled='disabled' value='按钮"+i+"'>";

}else{

document.getElementById("button").innerHTML = "<input type='button' value='按钮'>";

}

}

-->

</script>

<div id="button"><input type="button" disabled="disabled" value="按钮"></div>

这是我自己写的,效果已经实现,不过可能不是最佳的。

我很烦别人复制我写的程序做答案,所以我很久都没有来这里回答问题了。

自己写的东西经常被别人复制后~~别人为最佳答案,有点生气。追问忘了说。我用的vs2017 c#的,也可以用的是吗?

点击按钮出现60秒倒计时的简单js代码(推荐)

点击按钮出现60秒倒计时的简单js代码(推荐)
<!DOCTYPE
html
PUBLIC
"-//W3C//DTD
XHTML
1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type"
content="text/html;
charset=utf-8"
/>
<title>点击按钮出现60秒倒计时的简单js代码(推荐)</title>
<script
type="text/javascript"
src="js/jquery.js"></script>
</head>
<body>
<input
type="button"
id="btn"
value="免费获取验证码"
onclick="settime(this)"
/>
<script
type="text/javascript">
var
countdown=60;
function
settime(val)
{
if
(countdown
==
0)
{
val.removeAttribute("disabled");
val.value="免费获取验证码";
countdown
=
60;
}
else
{
val.setAttribute("disabled",
true);
val.value="重新发送("
+
countdown
+
")";
countdown--;
}
setTimeout(function()
{
settime(val)
},1000)
}
</script>
</body>
</html>
以上这篇点击按钮出现60秒倒计时的简单js代码(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

点击按钮出现60秒倒计时的简单js代码(推荐)

点击按钮出现60秒倒计时的简单js代码(推荐)
<!DOCTYPE
html
PUBLIC
"-//W3C//DTD
XHTML
1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type"
content="text/html;
charset=utf-8"
/>
<title>点击按钮出现60秒倒计时的简单js代码(推荐)</title>
<script
type="text/javascript"
src="js/jquery.js"></script>
</head>
<body>
<input
type="button"
id="btn"
value="免费获取验证码"
onclick="settime(this)"
/>
<script
type="text/javascript">
var
countdown=60;
function
settime(val)
{
if
(countdown
==
0)
{
val.removeAttribute("disabled");
val.value="免费获取验证码";
countdown
=
60;
}
else
{
val.setAttribute("disabled",
true);
val.value="重新发送("
+
countdown
+
")";
countdown--;
}
setTimeout(function()
{
settime(val)
},1000)
}
</script>
</body>
</html>
以上这篇点击按钮出现60秒倒计时的简单js代码(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

Vue解决时间在ios显示NAN的问题

解决使用vue做时间转换或倒计时,在ios上显示为NAN的问题
试过网上的正则匹配替换"-"为"/",但无效

最后使用moment.js成功解决
首先打开终端安装moment
npm install moment --save
安装成功后显示

使用示例(时间戳可用来对比时间差做倒计时等):

转化后 2021/01/10 10:12:12 时间戳 1610244732000

Vue解决时间在ios显示NAN的问题

解决使用vue做时间转换或倒计时,在ios上显示为NAN的问题
试过网上的正则匹配替换"-"为"/",但无效

最后使用moment.js成功解决
首先打开终端安装moment
npm install moment --save
安装成功后显示

使用示例(时间戳可用来对比时间差做倒计时等):

转化后 2021/01/10 10:12:12 时间戳 1610244732000

如何在 Vue 中使用 nextTick()

vue 中组件的(props 或 state)发生变化时不会立刻在 DOM 中响应,Vue 是异步更新 DOM的。所以有时当你修改了组件状态后,立刻获取对应dom对象,会发现获取不到。这个时候,就要用到Vue.nextTick()。

让我们详细的看看nextTick()函数是如何工作的。

更改 Vue 组件数据时,DOM 会异步更新。Vue 会从所有组件中收集对虚拟 DOM 的多次更新,然后尝试创建一个批处理来更新 DOM。

例如,让我们看下一个切换元素显示的组件:

单击 显示/隐藏 按钮更改 this.show 值,然后使用指令 v-if="show" 切换 元素的显示。

在 handleClick 函数中 ,分别在控制台打印了this.show 和 this.$refs.content (包含该 元素的引用) 的元素对象 ,此时会发现他们的结果不一致。 当 this.show 值为 true 时 , 结果 this.$refs.content is 值却是 undefined ,这意味着 DOM 与组件的数据不同步。

如果你想捕捉 DOM 刚刚更新的那一刻,那么你需要使用一个特殊的函数 Vue.nextTick(callback) 。

在DOM响应数据的变化后,会立刻执行 callback 回调函数。

这时,点击 显示/隐藏 按钮更改 this.show 值时,您会看到 this.$refs.content 与 this.show 值完全对应。

Vue 允许在组件实例上使用 this.$nextTick(callback) 。

在下面的示例 handleClick() 方法中更改 this.show 值,并使用 this.$nextTick() 捕捉DOM的更新:

如果要访问当前组件实例的更新使用 this.$nextTick() 更方便。

如果在没有参数的情况下调用 Vue.nextTick() 或 this.$nextTick() ,则函数返回一个 promise。

使用 async/await 语法更具可读性的。

例如,让我们通过使用以下 async/await 语法捕获 DOM 更新:

async handleClick() 已被标记为异步函数。

点击 显示/隐藏 按钮时, this.show 值会发生变化。

await this.$nextTick() 等待DOM的更改,在控制台打印 console.log(this.$refs.content) 引用的元素对象。

建议使用 async/await 语法,因为它比回调方法更具可读性。

如何在 Vue 中使用 nextTick()

vue 中组件的(props 或 state)发生变化时不会立刻在 DOM 中响应,Vue 是异步更新 DOM的。所以有时当你修改了组件状态后,立刻获取对应dom对象,会发现获取不到。这个时候,就要用到Vue.nextTick()。

让我们详细的看看nextTick()函数是如何工作的。

更改 Vue 组件数据时,DOM 会异步更新。Vue 会从所有组件中收集对虚拟 DOM 的多次更新,然后尝试创建一个批处理来更新 DOM。

例如,让我们看下一个切换元素显示的组件:

单击 显示/隐藏 按钮更改 this.show 值,然后使用指令 v-if="show" 切换 元素的显示。

在 handleClick 函数中 ,分别在控制台打印了this.show 和 this.$refs.content (包含该 元素的引用) 的元素对象 ,此时会发现他们的结果不一致。 当 this.show 值为 true 时 , 结果 this.$refs.content is 值却是 undefined ,这意味着 DOM 与组件的数据不同步。

如果你想捕捉 DOM 刚刚更新的那一刻,那么你需要使用一个特殊的函数 Vue.nextTick(callback) 。

在DOM响应数据的变化后,会立刻执行 callback 回调函数。

这时,点击 显示/隐藏 按钮更改 this.show 值时,您会看到 this.$refs.content 与 this.show 值完全对应。

Vue 允许在组件实例上使用 this.$nextTick(callback) 。

在下面的示例 handleClick() 方法中更改 this.show 值,并使用 this.$nextTick() 捕捉DOM的更新:

如果要访问当前组件实例的更新使用 this.$nextTick() 更方便。

如果在没有参数的情况下调用 Vue.nextTick() 或 this.$nextTick() ,则函数返回一个 promise。

使用 async/await 语法更具可读性的。

例如,让我们通过使用以下 async/await 语法捕获 DOM 更新:

async handleClick() 已被标记为异步函数。

点击 显示/隐藏 按钮时, this.show 值会发生变化。

await this.$nextTick() 等待DOM的更改,在控制台打印 console.log(this.$refs.content) 引用的元素对象。

建议使用 async/await 语法,因为它比回调方法更具可读性。

vue在ios上getDay() 为NAN的问题 (日期转星期)解决

最近在用vue,遇到倒计时在ios上显示为NAN的问题。

因为做的是倒计时支付,思路是获取服务器时间和下单时间,再转成秒级时间戳做差值。

网上的解决是:

然后用正则匹配改一下,将-替换为/

但是问题还是没有解决,在ios上仍然显示为NAN

然后

//转为时间戳let omTime =this.transformTime(transTime)

//转为时间戳let omTime =this.transformTime(transTime)

这个omTime时间戳就可以用来和服务器的时间戳做差值实现倒计时了,

经测试,在android和ios上都没问题,问题终于搞定!!!

有关moment.js基本操作可参考:

https://blog.csdn.net/badmoonc/article/details/82142100

这里mark记录一下,分享给你们,避免踏坑太久。

vue 里keep-alive中页面缓存后关闭计时器问题

vue项目中,正常情况下,我们在生命周期 destroyed 中关闭即可,一旦页面中使用了 keep-alive  进行缓存,此时  destroyed  会失效。需要在 deactivated 钩子函数去关闭,他是  keep-alive  特有的钩子函数。

activated() 开启定时器

deactivated() 关闭定时器

页面 自动刷新,可选择时间间隔,同时数据循环倒计时显示,从当前页push到子页面关闭当前页计时器。

vue 里keep-alive中页面缓存后关闭计时器问题

vue项目中,正常情况下,我们在生命周期 destroyed 中关闭即可,一旦页面中使用了 keep-alive  进行缓存,此时  destroyed  会失效。需要在 deactivated 钩子函数去关闭,他是  keep-alive  特有的钩子函数。

activated() 开启定时器

deactivated() 关闭定时器

页面 自动刷新,可选择时间间隔,同时数据循环倒计时显示,从当前页push到子页面关闭当前页计时器。

详解如何在Vue里建立长按指令

您是否曾想过按住按钮几秒钟才能在Vue应用程序中执行某个功能?

您是否曾想在应用程序上创建一个按钮,通过按一次(或按住按钮的整个输入)来清除单个输入?

如果你曾有过这些想法,很好,我也是。那么恭喜你看到了这篇文章。

本文将解释如何通过按下(或按住)按钮来执行功能和删除输入。

首先,我将解释如何在VanillaJS中实现这一目标。然后,为它创建一个Vue指令。

那么,让我们开始吧。

原理

为了实现长按,用户需要按住按钮几秒钟。

要在代码中复制它,我们需要在按下鼠标“单击”按钮时监听,启动计时器,不管我们希望用户在执行函数之前按住按钮,并在时间设置之后执行该功能。

非常简单!但是,我们需要知道用户何时按住该按钮。

怎么做

当用户单击按钮时,在单击事件之前会触发另外两个事件: mousedown 和 mouseup 。

当用户按下鼠标按钮时会调用 mousedown 事件,而当用户释放该按钮时会调用mouseup事件。

我们需要做的就是:

发生mousedown事件后启动计时器。

清除该计时器,并且在2secs标记之前触发mouseup事件后不执行该函数。即完整点击事件。

只要计时器在到达那个时间之前没有被清除,我们就会发现mouseup事件没有被触发 - 我们可以说用户没有释放按钮。因此,它被认为是长按,然后我们可以继续执行所述功能。

实际操作

让我们深入研究代码并完成这项工作。

首先,我们必须定义3件事,即:

variable 用于存储计时器。

start 函数启动计时器。

cancel 函数取消定时器

变量

这个变量基本上保存了setTimeout的值,所以我们可以在发生mouseup事件时取消它。

let pressTimer = null;

我们将变量设置为null,这样我们就可以检查变量,以便知道当前是否有一个活动定时器,然后才能取消它。

启动功能

该函数由setTimeout组成,它基本上是Javascript中的一种方法,它允许我们在函数中声明的特定持续时间之后执行函数。

请记住,在创建click事件的过程中,会触发两个事件。但我们需要启动计时器的是mousedown事件。因此,如果是单击事件,我们不需要启动计时器。

// Create timeout ( run function after 1s )

let start = (e) => {

// Make sure the event trigger isn't a click event

if (e.type === 'click' && e.button !== 0) {

return;

}

// Make sure we don't currently have a setTimeout running

// before starting another

if (pressTimer === null) {

pressTimer = setTimeout(() => {

// Execute soemthing !!!

}, 1000)

}

}

取消功能

这个函数基本上就是名字所说的,取消了调用start函数时创建的setTimeout。

要取消setTimeout,我们将在javascript中使用 clearTimeout 方法,该方法基本上清除了使用setTimeout()设置的计时器方法。

在使用clearTimeout之前,我们首先需要检查 pressTimer 变量是否设置为null。如果它未设置为null,则表示存在活动计时器。所以,我们需要清除计时器,你猜对了,将 pressTimer 变量设置为 null 。

let cancel = (e) => {

// Check if timer has a value or not

if (pressTimer !== null) {

clearTimeout(pressTimer)

pressTimer = null

}

}

一旦 mouseup 事件被触发,就会调用此函数。

设置触发器

剩下的就是将事件添加到要添加长按效果的按钮上。

addEventListener("mousedown", start);

addEventListener("click", cancel);

总而言之,我们有:

// Define variable

let pressTimer = null;

// Create timeout ( run function after 1s )

let start = (e) => {

if (e.type === 'click' && e.button !== 0) {

return;

}

if (pressTimer === null) {

pressTimer = setTimeout(() => {

// Execute something !!!

}, 1000);

}

}

// Cancel Timeout

let cancel = (e) => {

// Check if timer has a value or not

if (pressTimer !== null) {

clearTimeout(pressTimer);

pressTimer = null;

}

}

// select element with id longPressButton

let el = document.getElementById('longPressButton');

// Add Event listeners

el.addEventListener("mousedown", start);

// Cancel timeouts if this events happen

el.addEventListener("click", cancel);

el.addEventListener("mouseout", cancel);

将它全部包装在Vue指令中

在创建Vue指令时,Vue允许我们在组件的全局或本地定义指令,但在本文中我们将使用全局路由。

让我们构建完成此任务的指令。

首先,我们必须声明自定义指令的名称。

Vue.directive('longpress', {

}

这基本上注册了一个名为 v-longpress的全局自定义指令.

接下来,我们使用一些参数添加bind hook函数 ,这允许我们引用元素指令绑定,获取传递给指令的值并标识使用该指令的组件。

Vue.directive('longpress', {

bind: function (el, binding, vNode) {

}

}

接下来,我们在bind函数中添加我们的长按javascript代码。

Vue.directive('longpress', {

bind: function (el, binding, vNode) {

// Define variable

let pressTimer = null

// Define funtion handlers

// Create timeout ( run function after 1s )

let start = (e) => {

if (e.type === 'click' && e.button !== 0) {

return;

}

if (pressTimer === null) {

pressTimer = setTimeout(() => {

// Execute something !!!

}, 1000)

}

}

// Cancel Timeout

let cancel = (e) => {

// Check if timer has a value or not

if (pressTimer !== null) {

clearTimeout(pressTimer)

pressTimer = null

}

}

// Add Event listeners

el.addEventListener("mousedown", start);

// Cancel timeouts if this events happen

el.addEventListener("click", cancel);

el.addEventListener("mouseout", cancel);

}

})

接下来,我们需要添加一个函数来运行将传递给 longpress 指令的方法。

// Long Press vue directive

Vue.directive('longpress', {

bind: function (el, binding, vNode) {

// Define variable

let pressTimer = null

// Define funtion handlers

// Create timeout ( run function after 1s )

let start = (e) => {

if (e.type === 'click' && e.button !== 0) {

return;

}

if (pressTimer === null) {

pressTimer = setTimeout(() => {

// Execute function

handler()

}, 1000)

}

}

// Cancel Timeout

let cancel = (e) => {

// Check if timer has a value or not

if (pressTimer !== null) {

clearTimeout(pressTimer)

pressTimer = null

}

}

// Run Function

const handler = (e) => {

// Execute method that is passed to the directive

binding.value(e)

}

// Add Event listeners

el.addEventListener("mousedown", start);

// Cancel timeouts if this events happen

el.addEventListener("click", cancel);

el.addEventListener("mouseout", cancel);

}

})

现在我们可以在我们的Vue应用程序中使用该指令,该指令将正常工作,直到用户添加的值不是指令值中的函数。所以我们必须通过在发生这种情况时警告用户来防止这种情况。

要警告用户,我们将以下内容添加到bind函数:

// Make sure expression provided is a function

if (typeof binding.value !== 'function') {

// Fetch name of component

const compName = vNode.context.name

// pass warning to console

let warn = `[longpress:] provided expression '${binding.expression}' is not a function, but has to be`

if (compName) { warn += `Found in component '${compName}' ` }

console.warn(warn)

}

最后,这个指令也适用于触控设备。所以我们为 touchstart , touchend & touchcancel 添加事件。

把所有东西放在一起:

Vue.directive('longpress', {

bind: function (el, binding, vNode) {

// Make sure expression provided is a function

if (typeof binding.value !== 'function') {

// Fetch name of component

const compName = vNode.context.name

// pass warning to console

let warn = `[longpress:] provided expression '${binding.expression}' is not a function, but has to be`

if (compName) { warn += `Found in component '${compName}' ` }

console.warn(warn)

}

// Define variable

let pressTimer = null

// Define funtion handlers

// Create timeout ( run function after 1s )

let start = (e) => {

if (e.type === 'click' && e.button !== 0) {

return;

}

if (pressTimer === null) {

pressTimer = setTimeout(() => {

// Run function

handler()

}, 1000)

}

}

// Cancel Timeout

let cancel = (e) => {

// Check if timer has a value or not

if (pressTimer !== null) {

clearTimeout(pressTimer)

pressTimer = null

}

}

// Run Function

const handler = (e) => {

binding.value(e)

}

// Add Event listeners

el.addEventListener("mousedown", start);

el.addEventListener("touchstart", start);

// Cancel timeouts if this events happen

el.addEventListener("click", cancel);

el.addEventListener("mouseout", cancel);

el.addEventListener("touchend", cancel);

el.addEventListener("touchcancel", cancel);

}

})

现在引用我们的Vue组件:

<template>

<div>

<button v-longpress="incrementPlusTen" @click="incrementPlusOne">{{value}}</button>

</div>

</template>

<script>

export default {

data() {

return {

value: 10

}

},

methods: {

// Increment value plus one

incrementPlusOne() {

this.value++

},

// increment value plus 10

incrementPlusTen() {

this.value += 10

}

}

}

</script>

如果您希望了解有关自定义指令的更多信息,可以使用的钩子函数,可以传递给此钩子函数的参数,函数缩写。伟大的家伙@vuejs在解释它这里方面做得很好。

成功 !!!

Vue 5 Esprit 基础教程之菜单详解:Help(帮助)


在前面的讲解中,我们了解了Vue 5 Esprit的工作界面,顶部的快捷操作区,右侧的物体属性面板、相机控制中心和世界浏览器。Vue的主要操作主要是通过这些快捷方式来实现的,但是还有一些操作没有在这些快捷按钮或者面板中显示,那么就需要使用Vue的菜单了。本小节中我们就详细来看看菜单中那些我们在以前讲解中没有提到的内容。
在Vue 5 Esprit中一共有7个菜单,分别为File(文件)、Edit(编辑)、Objects(物体)、Atmosphere(大气)、Display(显示)、Picture(图像)和Help(帮助),下面就分别来看看它们的用法。因为前面的讲解中我们曾经在对按钮或者面板的讲解中已经包含有菜单的部分内容,所以现在我们主要讲解那些前面讲解内容中没有涉及到的内容。
本文中我们主要讲解Help(帮助)菜单。
Help(帮助)菜单是Vue菜单栏中的最后一组,如图15所示。它主要是用于显示帮助信息的,使用Vue的Help(帮助)菜单我们可以快速使用它的帮助系统帮我们轻松掌握Vue的使用。
Help(帮助)菜单
其中,Kick Start Tutorial(开始学习)用于打开一个Flash文件,演示Vue的简单使用,如图所示。
Flash演示文件
Overview(概要)、About Interface(关于界面)和Tutorials(教程)都是用于打开相关的帮助文件,介绍Vue的使用的。
用于打开Vue的官方网站,Register Online(在线注册)用于在官方网站在线注册的。Show Proct Installation Code(显示产品安装代码)用于显示Vue的安装代码的,如图所示。
显示安装代码
About Vue 5 Esprit(关于Vue 5 Esprit)用于打开Vue 5 Esprit的一个欢迎界面,显示版本号等信息,如图所示。
关于Vue 5 Esprit
小结:本讲是Vue 5 Esprit基础使用的最后一讲,也是Vue基础知识的最后一个小结,至此我们已经讲Vue的基础使用全部讲解完了。
在以后的讲解中我们所涉及到的将会Vue的一些相对来说比较复杂和难于掌握的内容,如函数、滤镜、渲染、动画等等,属于Vue的进阶教程。在本讲结束的时候,朋友们应该可以使用Vue进行简单的创作了,因为我们已经将其基础部分全部详细讲解了,只要不断地进行试验和创作,应该能够创作出丰富的效果图来。
在前面的内容中我们主要了解了Vue的图像问题,其中需要重点掌握的也仅仅是一个区域渲染的问题,区域渲染能够帮助我们查看场景中的细节,在实际的创作中是非常有帮助的,因而有必要对其重视。

Vue 5 Esprit 基础教程之菜单详解:Help(帮助)


在前面的讲解中,我们了解了Vue 5 Esprit的工作界面,顶部的快捷操作区,右侧的物体属性面板、相机控制中心和世界浏览器。Vue的主要操作主要是通过这些快捷方式来实现的,但是还有一些操作没有在这些快捷按钮或者面板中显示,那么就需要使用Vue的菜单了。本小节中我们就详细来看看菜单中那些我们在以前讲解中没有提到的内容。
在Vue 5 Esprit中一共有7个菜单,分别为File(文件)、Edit(编辑)、Objects(物体)、Atmosphere(大气)、Display(显示)、Picture(图像)和Help(帮助),下面就分别来看看它们的用法。因为前面的讲解中我们曾经在对按钮或者面板的讲解中已经包含有菜单的部分内容,所以现在我们主要讲解那些前面讲解内容中没有涉及到的内容。
本文中我们主要讲解Help(帮助)菜单。
Help(帮助)菜单是Vue菜单栏中的最后一组,如图15所示。它主要是用于显示帮助信息的,使用Vue的Help(帮助)菜单我们可以快速使用它的帮助系统帮我们轻松掌握Vue的使用。
Help(帮助)菜单
其中,Kick Start Tutorial(开始学习)用于打开一个Flash文件,演示Vue的简单使用,如图所示。
Flash演示文件
Overview(概要)、About Interface(关于界面)和Tutorials(教程)都是用于打开相关的帮助文件,介绍Vue的使用的。
用于打开Vue的官方网站,Register Online(在线注册)用于在官方网站在线注册的。Show Proct Installation Code(显示产品安装代码)用于显示Vue的安装代码的,如图所示。
显示安装代码
About Vue 5 Esprit(关于Vue 5 Esprit)用于打开Vue 5 Esprit的一个欢迎界面,显示版本号等信息,如图所示。
关于Vue 5 Esprit
小结:本讲是Vue 5 Esprit基础使用的最后一讲,也是Vue基础知识的最后一个小结,至此我们已经讲Vue的基础使用全部讲解完了。
在以后的讲解中我们所涉及到的将会Vue的一些相对来说比较复杂和难于掌握的内容,如函数、滤镜、渲染、动画等等,属于Vue的进阶教程。在本讲结束的时候,朋友们应该可以使用Vue进行简单的创作了,因为我们已经将其基础部分全部详细讲解了,只要不断地进行试验和创作,应该能够创作出丰富的效果图来。
在前面的内容中我们主要了解了Vue的图像问题,其中需要重点掌握的也仅仅是一个区域渲染的问题,区域渲染能够帮助我们查看场景中的细节,在实际的创作中是非常有帮助的,因而有必要对其重视。

酷申汽车网还为您提供以下相关内容希望对您有帮助:

怎样使用Vue实现倒计时按钮

按钮在点击之后会出现倒计时,同时按钮变为不可点击状态,样式也发生变化,鼠标悬浮上的样子也会发生变化。接下来我们用代码来实现: {{content}}...data () { return { content: '发送验证码', // 按钮里显示的内容 ...

vue数据列表倒计时,如何实现?

vue中的前端问题:一个数据列表,有几个数据要实现倒计时,每个数据的倒计时的时间不一样,有的可能是1分钟倒计时,有的可能是2分钟倒计时,该如何实现... vue中的前端问题:一个数据列表,有几个数据要实现倒计时,每个数据的倒计时的时间...

vue 里keep-alive中页面缓存后关闭计时器问题

vue项目中,正常情况下,我们在生命周期 destroyed 中关闭即可,一旦页面中使用了 keep-alive  进行缓存,此时  destroyed  会失效。需要在 deactivated 钩子函数去关闭,他是 ...

vue在ios上getDay() 为NAN的问题 (日期转星期)解决

然后 //转为时间戳let omTime =this.transformTime(transTime)//转为时间戳let omTime =this.transformTime(transTime)这个omTime时间戳就可以用来和服务器的时间戳做差值实现倒计时了,经测试,在android和ios上都没问题...

文本框内输入任意数字点击按钮开始倒计时结束时弹出警告框怎么写?_百 ...

第二种,可能你需要一个倒计时的效果,可以用这种,每1秒减1: 开始 function ks(){ var currentValue = document.getElementById("num").value;djs(currentValue);} function djs(currentValue){ if(currentValue...

让按钮显示倒计时10秒以后才能点击确定

这是我自己写的,效果已经实现,不过可能不是最佳的。我很烦别人复制我写的程序做答案,所以我很久都没有来这里回答问题了。自己写的东西经常被别人复制后~~别人为最佳答案,有点生气。

点击按钮出现60秒倒计时的简单js代码(推荐)

setTimeout(function(){ settime(val)},1000)} 以上这篇点击按钮出现60秒倒计时的简单js代码(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

怎样利用JS做出引用传递与值传递

现在这里总体上说明,这二者的本质区别就在于传递的数据类型不一样,值传递传递的是一个值,而引用传递传递的是一个对象。看一下代码以及代码中的注释。一、引入function func(a){ a++;}// 因为函数都没有调用,所以找...

抖音上面发布的视频怎样才能被推荐?

不要频繁的出现,一个手机频繁的切换四五个账号,那样子是会降权的,就是他有一个隐形的加权潜规则,但是他也是有隐形降权的。我们肯定是不能来回去切号的。一台手机,最多两个账号就可以了,不能来回来去切换!

如何使用echarts在节点显示动态数据及添加提示文本

1、每个节点显示动态数据,这个其实可以通过配置项完成,在series数据绑定中,可以使用原本的配置项itemStyle中的标签格式化完成,如下:代码如下,如果需要修改文字显示的样式,则需另外配置项(如font-style,font-weigth等)完成{...

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

Top