{"id":27797,"date":"2022-02-08T01:39:57","date_gmt":"2022-02-08T01:39:57","guid":{"rendered":"http:\/\/Trigger-a-Feedback-Form-on-Video-Completion-in-Nuxtjs"},"modified":"2025-09-26T14:03:22","modified_gmt":"2025-09-26T21:03:22","slug":"trigger-a-feedback-form-on-video-completion-in-nuxtjs","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/","title":{"rendered":"Trigger a Feedback Form on Video Completion in Nuxtjs"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Interactivity is a big part of today\u2019s online pages. These responsibilities include gathering information on user involvement, processing form submissions, and controlling the interactivity of media assets.<\/p>\n<p>In this tutorial, we will discuss how to trigger a feedback form on video completion in Nuxt.js.<\/p>\n<h2>Sandbox<\/h2>\n<p>This project was completed in a <a href=\"https:\/\/codesandbox.io\/s\/feedback-form-trigger-dlqif-dlqif?file=\/pages\/index.vue\">Codesandbox<\/a>. To get started quickly, fork the <a href=\"https:\/\/codesandbox.io\/s\/feedback-form-trigger-dlqif-dlqif?file=\/pages\/index.vue\">Codesandbox<\/a> or run the project.<\/p>\n<\/div>\n\n\n  <div class=\"wp-block-cloudinary-code-sandbox \">\n    <iframe\n      src=\"https:\/\/codesandbox.io\/embed\/feedback-form-trigger-dlqif?theme=dark&amp;codemirror=1&amp;highlights=&amp;editorsize=50&amp;fontsize=14&amp;expanddevtools=0&amp;hidedevtools=0&amp;eslint=0&amp;forcerefresh=0&amp;hidenavigation=0&amp;initialpath=%2F&amp;module=&amp;moduleview=0&amp;previewwindow=&amp;view=&amp;runonclick=1\"\n      height=\"500\"\n      style=\"width: 100%;\"\n      title=\"Trigger a Feedback Form on Video Completion in Nuxt.js\"\n      loading=\"lazy\"\n      allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n      sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n    ><\/iframe>\n  <\/div>\n\n\n<div class=\"wp-block-cloudinary-markdown \"><p>GitHub Repository: <a href=\"https:\/\/github.com\/Olanetsoft\/video-event-trigger-in-nuxt\">https:\/\/github.com\/Olanetsoft\/video-event-trigger-in-nuxt<\/a><\/p>\n<h1>Prerequisite<\/h1>\n<p>The knowledge of JavaScript and Vue.js is needed for this post. The knowledge of Nuxt.js is not required but preferred.<\/p>\n<h1>Getting Started with Nuxtjs<\/h1>\n<p><a href=\"https:\/\/nuxtjs.org\/\">Nuxt.js<\/a> provides the bedrock of our Vue.js project, providing structure and flexibility while allowing us to scale the application with confidence.<\/p>\n<p>It is extensible, with a robust module ecosystem and hooks engine that makes it simple to integrate your REST or GraphQL endpoints, favourite CMS, CSS frameworks, and other third-party applications.<\/p>\n<h1>Project Setup and Installation<\/h1>\n<p>To create a new project, we will use the command below to scaffold a new project:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">    npx create-nuxt-app <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project-name<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>A series of prompts will appear as a result of the command. Here are the defaults we recommend:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/media_jams\/s_9B5922DFEA0A31B0667492516DCEF6800EC8D10B5B798BAAD456C8148700CB48_1642345993882_Screenshot+2022-01-16+at+16.12.14.png\" alt=\"Nuxtjs-Setup\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1187\" height=\"384\"\/><\/p>\n<p>Next, we need to navigate the project directory and start the development server using the command below.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">    cd <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span> <span class=\"hljs-attr\">name<\/span>&gt;<\/span> &amp;&amp; yarn dev\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Nuxt.js will start a hot-reloading development environment accessible by default at <code>http:\/\/localhost:3000<\/code><\/p>\n<h1>Cloudinary Video Player Installation<\/h1>\n<p>We need to detect and respond when the status of a video player changes; thus, we will be relying on the <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_video_player\">Cloudinary Video Player<\/a> for customization and integration.<\/p>\n<p><a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_video_player\">Cloudinary video player<\/a> is a JavaScript-based HTML5 video player that comes with a slew of helpful customization and integration features, as well as monetization and analytics support.<\/p>\n<p>The video player\u2019s assets will be added to our <code>nuxt.config.js<\/code> in the <code>link<\/code> and <code>script<\/code> section of the file using the following snippet:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">\n    <span class=\"hljs-comment\">\/\/ nuxt.config.js<\/span>\n    \n    <span class=\"hljs-keyword\">export<\/span>  <span class=\"hljs-keyword\">default<\/span>  {\n      <span class=\"hljs-attr\">head<\/span>:  {\n          ...\n      link: &#91;\n          ...\n      {\n        <span class=\"hljs-attr\">rel<\/span>:  <span class=\"hljs-string\">'stylesheet'<\/span>, \n        <span class=\"hljs-attr\">href<\/span>:  <span class=\"hljs-string\">'https:\/\/unpkg.com\/cloudinary-video-player@1.5.9\/dist\/cld-video-player.min.css'<\/span>  \n      }\n            ],\n      <span class=\"hljs-attr\">script<\/span>:  &#91;\n      { \n      <span class=\"hljs-attr\">src<\/span>:  <span class=\"hljs-string\">'https:\/\/unpkg.com\/cloudinary-core@latest\/cloudinary-core-shrinkwrap.min.js'<\/span> \n      },\n      { \n      <span class=\"hljs-attr\">src<\/span>:  <span class=\"hljs-string\">'https:\/\/unpkg.com\/cloudinary-video-player@1.5.9\/dist\/cld-video-player.min.js'<\/span>\n      },\n              ],\n      },\n    };\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>We need to save our Cloudinary cloud name to refer to it from any file. In the following step, it will be saved as an environmental variable in the global <code>.env<\/code> file at the project root.<\/p>\n<p>You can get your cloud name from your <a href=\"https:\/\/cloudinary.com\/users\/register\/free\">Cloudinary dashboard<\/a> by signing up for a Cloudinary Account.<\/p>\n<p>Create a <code>.env<\/code> file at the root of the project with the command <code>touch .env<\/code> and update it with the following snippet:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">    NUXT_ENV_CLOUDINARY_CLOUD_NAME=<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cloudinary-cloud-name<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>We can now create our video player by updating <code>pages\/index.vue<\/code> with the following code snippet:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"flex justify-center items-center h-screen space-x-10\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"rounded overflow-hidden shadow-lg mb-4 content-center\"<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"px-6 py-4 pb-2\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"font-bold text-xl mb-2\"<\/span>&gt;<\/span>Feedback Form Trigger<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">video<\/span>\n              <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"video-player\"<\/span>\n              <span class=\"hljs-attr\">controls<\/span>\n              <span class=\"hljs-attr\">autoplay<\/span>\n              <span class=\"hljs-attr\">muted<\/span>\n              <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"500px\"<\/span>\n              <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"width-full\"<\/span>\n            &gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">video<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n    \n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n      data() {\n        <span class=\"hljs-keyword\">return<\/span> {\n          <span class=\"hljs-attr\">cld<\/span>: <span class=\"hljs-literal\">null<\/span>,\n          <span class=\"hljs-attr\">player<\/span>: <span class=\"hljs-literal\">null<\/span>,\n          <span class=\"hljs-attr\">video<\/span>: <span class=\"hljs-string\">\"samples\/animals\/testvid\"<\/span>,\n        };\n      },\n    \n      mounted() {\n        <span class=\"hljs-keyword\">this<\/span>.cld = cloudinary.Cloudinary.new({\n          <span class=\"hljs-attr\">cloud_name<\/span>: process.env.NUXT_ENV_CLOUDINARY_CLOUD_NAME,\n          <span class=\"hljs-attr\">secure<\/span>: <span class=\"hljs-literal\">true<\/span>,\n        });\n    \n        <span class=\"hljs-keyword\">this<\/span>.player = <span class=\"hljs-keyword\">this<\/span>.cld.videoPlayer(<span class=\"hljs-string\">\"video-player\"<\/span>, {\n          <span class=\"hljs-attr\">analytics<\/span>: {\n            <span class=\"hljs-attr\">events<\/span>: &#91;<span class=\"hljs-string\">\"ended\"<\/span>],\n          },\n        });\n    \n        <span class=\"hljs-keyword\">this<\/span>.player.source(<span class=\"hljs-keyword\">this<\/span>.video);\n      },\n      <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"IndexPage\"<\/span>,\n    };\n    <\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>In the code snippet above, we established a Cloudinary instance, used it to initialize the video player, and set up the video source in our mounted lifecycle hook.<\/p>\n<p>We should have something similar to the image below:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/media_jams\/s_9B5922DFEA0A31B0667492516DCEF6800EC8D10B5B798BAAD456C8148700CB48_1642349629470_Screenshot+2022-01-16+at+17.03.54.png\" alt=\"Nuxtjs\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"2000\" height=\"1115\"\/><\/p>\n<h1>Trigger a Feedback Form based on Video State<\/h1>\n<p>We have successfully integrated our video player, and we can set up a trigger action for when the video has ended. This is accomplished by simply adding the events to the analytics setting in the video player\u2019s setup. The video state is then stored in the page\u2019s state with the aid of event listeners.<\/p>\n<p>Next, We will update the <code>pages\/index.vue<\/code> with the code snippet below:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n      <span class=\"hljs-comment\">&lt;!-- markup goes here --&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n    \n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n      data() {\n        <span class=\"hljs-keyword\">return<\/span> {\n         <span class=\"hljs-comment\">\/\/...<\/span>\n          <span class=\"hljs-attr\">ended<\/span>: <span class=\"hljs-literal\">null<\/span>,\n        };\n      },\n    \n      mounted() {\n        <span class=\"hljs-comment\">\/\/...<\/span>\n        <span class=\"hljs-keyword\">this<\/span>.player.on(<span class=\"hljs-string\">\"ended\"<\/span>, () =&gt; {\n          <span class=\"hljs-keyword\">this<\/span>.ended = <span class=\"hljs-literal\">true<\/span>;\n        });\n      },\n      <span class=\"hljs-comment\">\/\/...<\/span>\n    };\n    <\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>In the code snippet above, we created a state variable <code>ended<\/code> that keeps track of the event whenever our video ends.<\/p>\n<p>Next, we will create a <code>Form.vue<\/code> file inside the <code>components<\/code> folder to display our feedback form with the snippet below:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"mb-4\"<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"block text-gray-700 text-sm font-bold mb-2\"<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"name\"<\/span>&gt;<\/span>\n            Name\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span>\n            <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline\"<\/span>\n            <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"name\"<\/span>\n            <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span>\n            <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"name\"<\/span>\n            <span class=\"hljs-attr\">ref<\/span>=<span class=\"hljs-string\">\"name\"<\/span>\n          \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"mb-6\"<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"block text-gray-700 text-sm font-bold mb-2\"<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"feedback\"<\/span>&gt;<\/span>\n            Video Feedback\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">textarea<\/span>\n          <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"\n            form-control\n            block\n            w-full\n            px-3\n            py-1.5\n            text-base\n            font-normal\n            text-gray-700\n            bg-white bg-clip-padding\n            border border-solid border-gray-300\n            rounded\n            transition\n            ease-in-out\n            m-0\n            focus:text-gray-700 focus:bg-white focus:border-blue-600 focus:outline-none\n          \"<\/span>\n          <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"exampleFormControlTextarea1\"<\/span>\n          <span class=\"hljs-attr\">rows<\/span>=<span class=\"hljs-string\">\"3\"<\/span>\n          <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Your message\"<\/span>\n        &gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">textarea<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"flex items-center justify-between\"<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span>\n            <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline\"<\/span>\n            <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"button\"<\/span>\n            @<span class=\"hljs-attr\">click.prevent<\/span>=<span class=\"hljs-string\">\"getFormValues()\"<\/span>\n          &gt;<\/span>\n            Submit\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n    \n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n      data() {\n        <span class=\"hljs-keyword\">return<\/span> {\n          <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"\"<\/span>,\n          <span class=\"hljs-attr\">feedback<\/span>: <span class=\"hljs-string\">\"\"<\/span>,\n          <span class=\"hljs-attr\">videoEnded<\/span>: <span class=\"hljs-string\">\"\"<\/span>,\n        };\n      },\n      <span class=\"hljs-attr\">methods<\/span>: {\n        getFormValues() {\n          alert(<span class=\"hljs-string\">`Feedback received successfully!`<\/span>);\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-keyword\">this<\/span>.$refs.name.value);\n          <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-keyword\">this<\/span>.$refs.feedback.value);\n        },\n      },\n    };\n    <\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Next, we update <code>pages\/index.vue<\/code> by importing the <code>Form.vue<\/code> component with the following snippet below:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"flex justify-center items-center h-screen space-x-10\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"rounded overflow-hidden shadow-lg mb-4 content-center\"<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"px-6 py-4 pb-2\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"font-bold text-xl mb-2\"<\/span>&gt;<\/span>Feedback Form Trigger<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">video<\/span>\n              <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"video-player\"<\/span>\n              <span class=\"hljs-attr\">controls<\/span>\n              <span class=\"hljs-attr\">autoplay<\/span>\n              <span class=\"hljs-attr\">muted<\/span>\n              <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"500px\"<\/span>\n              <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"width-full\"<\/span>\n            &gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">video<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-comment\">&lt;!-- Form Added here --&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Form<\/span> <span class=\"hljs-attr\">v-if<\/span>=<span class=\"hljs-string\">\"ended\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">Form<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n    \n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n    <span class=\"hljs-keyword\">import<\/span> Form <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"..\/components\/Form.vue\"<\/span>;\n      <span class=\"hljs-comment\">\/\/...<\/span>\n      components: {\n        Form,\n      },\n      <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"IndexPage\"<\/span>,\n    };\n    <\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>In the snippet above, we use the <code>v-if=&quot;ended&quot;<\/code> attribute in the Form imported to show the feedback form when the <code>ended<\/code> variable is <code>true<\/code>.<\/p>\n<p>Next, testing our application by opening a local development server, we should have something similar to what is shown below after the video ends.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/media_jams\/s_9B5922DFEA0A31B0667492516DCEF6800EC8D10B5B798BAAD456C8148700CB48_1642351908112_Screenshot+2022-01-16+at+17.51.29.png\" alt=\"Nuxtjs-Result\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"2000\" height=\"1117\"\/><\/p>\n<h1>Conclusion<\/h1>\n<p>This article addressed triggering a feedback form on video Completion in Nuxt.js. Once a video has finished playing, we render a feedback form to receive the user\u2019s input\/feedback.<\/p>\n<h1>Resources<\/h1>\n<p>You may find these resources helpful.<\/p>\n<ul>\n<li>\n<a href=\"https:\/\/www.w3schools.com\/tags\/ref_av_dom.asp\">HTML Audio\/Video DOM Reference<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_video_player\">Cloudinary Video Player<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":27798,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[134,177,372,371,303,315],"class_list":["post-27797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-guest-post","tag-javascript","tag-nuxtjs","tag-under-review","tag-video","tag-vue"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Trigger a Feedback Form on Video Completion in Nuxtjs<\/title>\n<meta name=\"description\" content=\"This article addressed triggering a feedback form on video Completion in Nuxt.js. Once a video has finished playing, we render a feedback form to receive the user&#039;s input\/feedback.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trigger a Feedback Form on Video Completion in Nuxtjs\" \/>\n<meta property=\"og:description\" content=\"This article addressed triggering a feedback form on video Completion in Nuxt.js. Once a video has finished playing, we render a feedback form to receive the user&#039;s input\/feedback.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-08T01:39:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-26T21:03:22+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Trigger a Feedback Form on Video Completion in Nuxtjs\",\"datePublished\":\"2022-02-08T01:39:57+00:00\",\"dateModified\":\"2025-09-26T21:03:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/\"},\"wordCount\":9,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA\",\"keywords\":[\"Guest Post\",\"Javascript\",\"NuxtJS\",\"Under Review\",\"Video\",\"Vue\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2022\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/\",\"name\":\"Trigger a Feedback Form on Video Completion in Nuxtjs\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA\",\"datePublished\":\"2022-02-08T01:39:57+00:00\",\"dateModified\":\"2025-09-26T21:03:22+00:00\",\"description\":\"This article addressed triggering a feedback form on video Completion in Nuxt.js. Once a video has finished playing, we render a feedback form to receive the user's input\/feedback.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA\",\"width\":3800,\"height\":2533},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trigger a Feedback Form on Video Completion in Nuxtjs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Trigger a Feedback Form on Video Completion in Nuxtjs","description":"This article addressed triggering a feedback form on video Completion in Nuxt.js. Once a video has finished playing, we render a feedback form to receive the user's input\/feedback.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/","og_locale":"en_US","og_type":"article","og_title":"Trigger a Feedback Form on Video Completion in Nuxtjs","og_description":"This article addressed triggering a feedback form on video Completion in Nuxt.js. Once a video has finished playing, we render a feedback form to receive the user's input\/feedback.","og_url":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/","og_site_name":"Cloudinary Blog","article_published_time":"2022-02-08T01:39:57+00:00","article_modified_time":"2025-09-26T21:03:22+00:00","twitter_card":"summary_large_image","twitter_image":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/"},"author":{"name":"","@id":""},"headline":"Trigger a Feedback Form on Video Completion in Nuxtjs","datePublished":"2022-02-08T01:39:57+00:00","dateModified":"2025-09-26T21:03:22+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/"},"wordCount":9,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA","keywords":["Guest Post","Javascript","NuxtJS","Under Review","Video","Vue"],"inLanguage":"en-US","copyrightYear":"2022","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/","url":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/","name":"Trigger a Feedback Form on Video Completion in Nuxtjs","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA","datePublished":"2022-02-08T01:39:57+00:00","dateModified":"2025-09-26T21:03:22+00:00","description":"This article addressed triggering a feedback form on video Completion in Nuxt.js. Once a video has finished playing, we render a feedback form to receive the user's input\/feedback.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA","width":3800,"height":2533},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/trigger-a-feedback-form-on-video-completion-in-nuxtjs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Trigger a Feedback Form on Video Completion in Nuxtjs"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926245\/Web_Assets\/blog\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01\/fbaaaf433c5cc19bfad5ee3fa1f701584bda2fea-3800x2533-1_2779849e01.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=27797"}],"version-history":[{"count":1,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27797\/revisions"}],"predecessor-version":[{"id":38624,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27797\/revisions\/38624"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/27798"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=27797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=27797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=27797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}