Giter Club home page Giter Club logo

nuxtjs-whatsapp-card's Introduction

Nuxt JS - WhatsApp Card

@karytonn.dev

Seja para conversão do GoogleADS ou simplesmente fornecer um meio de contato rápido para clientes, ter um botão de WhatsApp integrado ao site é indispensável nos dias de hoje.

Por mais que pareça simples, fazer isso de forma que se adapte aos mais diversos casos de uso pode levar tempo, sendo assim, aproveito para compartilhar meu template que desenvolvi em VueJS / NuxtJS.


Para esse template iremos utilizar os seguintes recursos:

  • Projeto em Vue JS ou Nuxt JS (suponho que já tenha)
  • Tailwind CSS - Estilização
  • Animate CSS - Animação (opcional)

Se desejar utilizar somente a estilização do componente, fique a vontade para copiar a parte do HTML/CSS, que inclusive, já vou deixar separadinho aqui.

Mão na massa!

1 ) A instalação do Tailwind CSS é super simples e você pode conferir o tutorial oficial clicando aqui

2 ) Os passos abaixo descrevem a instalação do Animate CSS em projetos Nuxt ou Vue

Para usuários npm, adicione animate.css em seu projeto usando este comando:

npm install animate.css --save

Para usuários de yarn

yarn add animate.css

Importação com Nuxt JS: no arquivo nuxt.config.js importe o CSS da seguinte forma:

css: ['animate.css/animate.min.css']

Importação com Vue JS: Faça o import dentro do componente que iremos criar logo abaixo.

import 'animate.css'

3 ) Crie um componente vue em components/WhatsAppCTA.vue

4 ) Em seu componente substitua o conteúdo entre a tag ... pelo código abaixo.

<div class="fixed right-6 bottom-6">
    
    <transition 
      enter-active-class="animate__animated animate__fadeInRight"
      mode="out-in"
    >
      <!-- CARD TO SEND MESSAGE -->
      <div v-if="isOpen">
        <div class="w-96 max-w-[90vw] rounded-3xl overflow-hidden shadow-2xl shadow-[#075E54]/50 bg-[#E7E7E7]">
          
          <!-- Header and close button -->
          <div class="h-20 p-5 flex items-center justify-between gap-4 bg-[#25D366]">
            <div class="flex items-center gap-3">
              <img class="w-7 h-28" src="@/assets/icon/header/whatsapp.svg" alt="WP">
              <p class="text-lg font-medium text-white">WhatsApp</p>
            </div>
            <button @click="isOpen = false" class="hover:rotate-12 hover:scale-110" title="Fechar">
              <img src="@/assets/icon/close.svg" alt="Fechar" class="w-8 h-8">
            </button>
          </div>


          <!-- Message input -->
          <div class="p-4 py-6">
            <input type="text" name="message" id="message" v-model="form.message" maxlength="140" title="Mensagem"
              class="w-full px-4 py-4 rounded-full text-sm border-none text-[#075E54]">
          </div>


          <!-- Send button -->
          <div class="w-full p-4 flex justify-end">
            <button @click="goToWhatsAppChat" id="send-whatsapp-message" title="Enviar mensagem"
              class="px-5 py-2 rounded-full flex items-center justify-between gap-1 bg-[#25D366] hover:scale-105 hover:shadow-lg hover:shadow-[#075E54]/30 transition-all duration-300">
              <p class="font-medium text-white">Abrir Conversa</p>
              <img src="@/assets/icon/send.svg" alt="Enviar">
            </button>
          </div>


        </div>
      </div>


      <!-- BUTTON TO OPEN SEND MESSAGE CARD -->
      <button v-else @click="openWhatsAppCard" id="open-whatsapp-card" 
        class="w-16 h-16 rounded-full grid place-content-center hover:scale-105 transition-all duration-300 bg-[#25D366] shadow-xl shadow-[#075E54]/20" title="WhatsApp">
        <img src="@/assets/icon/header/whatsapp.svg" alt="WhatsApp" class="w-8 h-8">
      </button>
    </transition>


  </div>

5 ) Ainda no componente substitua a tag <script>...</script> pelo conteúdo abaixo

<script lang="ts">
import Vue from 'vue';


export default Vue.extend({
  data() {
    return {
      isOpen: false,
      form: {
        message: "Falar com nossa equipe agora!",
        number: '5562988887777'
      }
    }
  },
  methods: {
    openWhatsAppCard() {
      this.form.message = "Falar com nossa equipe agora!"
      this.isOpen = true
      // ... Dispare qualquer outra coisa aqui
    },
    goToWhatsAppChat() {
      this.isOpen = false;
      let message = (this.form.message === "Falar com nossa equipe agora!")? " " : this.form.message;
      window.open(`https://api.whatsapp.com/send?phone=${this.form.number}&text=${message}`, '_blank')
      this.form.message = "Falar com nossa equipe agora!"
      // ... Dispare qualquer outra coisa aqui
    }
  }
});
</script>

Caso não esteja utilizando TypeScript em seu projeto, remova lang="ts" no inicio da tag <script>.

6 ) No objeto form dentro da função data( ), substitua os valores das propriedades conforme necessário.

7 ) No método openWhatsAppCard( ) substitua o valor da propriedade this.form.message pelo mesmo utilizado no objeto form da função data( ), faça o mesmo no método goToWhatsAppChat( )

8 ) Para utilizar o componente com Nuxt basta fazer sua declaração na(s) página(s) ou no layout, com Vue puro faça a importação no App.vue.

Sim, isso é tudo! Seu componente de integração com o WhatsApp está pronto para uso.

Vou deixar aqui o código completo e você pode simplesmente copiar e colar fazendo as devidas adequações.

Quer ver uma demostração, esse é o site de um cliente real onde implementamos esta funcionalidade.


Se isso te ajudou de alguma forma, não deixe de curtir e compartilhar esse artigo 😉


ah... qualquer coisa conte comigo! LinkedIn GitHub Instagram Twitter www.karytonn.dev

nuxtjs-whatsapp-card's People

Contributors

karytonn avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.