UNPKG

vue-longpress

Version:

Hold the click in the button to confirm the action

85 lines (57 loc) 2.32 kB
## VueLongpress A VueJS (2.x) button component that requires you to keep pressing to confirm a given action. ## DEMO [Live demo on jsFiddle](https://jsfiddle.net/qr9ykxpp/) ### What is this? A component that will generate a button that requires you to keep pressing for a given time to execute a given action. ### Why would i need that? Think of a sensitive scenario, something like deleting a user's data, you might need to confirm for 5 seconds that you actually want to delete it, to prevent unintentional clicks ## Install Install from npm: ```js npm install vue-longpress --save ``` ## Example ```js import Longpress from 'vue-longpress'; var vm = new Vue({ el: '#app', components: {Longpress}, methods: { deleteUser() { // Delete the user login here console.log('user deleted'); } }, template: `<div> <longpress duration="5" pressing-text="Keep pressing for {$rcounter} seconds to delete" action-text="Deleting, please wait...">Click and hold to delete this user</longpress> </div>` }); ``` ### Options / Props This component support five (5) props: 1. *on-confirm*: a callback function that will be called when the time has ellapsed (i.e. when the counter is 0) 2. *value*: a value that is passed as an argument to the confirmation function 3. *duration*: how long (_in seconds_) the user will need to keep pressing 4. *pressing-text*: the text to display while the user needs to "hold" the click (e.g. Keep pressing to confirm) 5. *action-text*: the text to display when the action is executing (e.g. Please wait...) Also there's a `reset` method in case you need to reset your button status. To use it you'll need to add a `ref` to your button and call it from there. e.g.: In your template: ```js <longpress ref="deleteButton"></longpress> ``` In your method: ```js doDelete() { // delete logic here ... // and now reset the button if needed this.$refs.deleteButton.reset(); } ``` ### Labels templates You can use these placeholders to display dynamic texts: 1. {$counter} - how much time (in seconds) has ellapsed (i.e. from 0 to {$duration}) 2. {$rcounter} - how much time (in seconds) is remaining (i.e. from {$duration} to 0) 3. {$duration} - how much should the user press the button in total (in seconds)