java script base adaptável para qualquer nicho (e-commerce, blogs, portfólios, SaaS, etc.).
JavaScript personalizado
🧩 Estrutura base reutilizável
```javascript
// ========================
// JavaScript Personalizado Multi-Nicho
// ========================
(function() {
'use strict';
// ----------------------------------------------
// 1. CONFIGURAÇÕES GLOBAIS (edite aqui por nicho)
// ----------------------------------------------
const config = {
niche: 'geral', // ecommerce, blog, portfolio, saas
debug: true, // exibe logs no console
apiBaseUrl: '', // URL da API se necessário
theme: {
primaryColor: '#3498db',
secondaryColor: '#2ecc71'
}
};
// ----------------------------------------------
// 2. UTILITÁRIOS COMUNS
// ----------------------------------------------
const utils = {
log: (...args) => config.debug && console.log('[CustomJS]', ...args),
onReady: (fn) => document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', fn) : fn(),
formatCurrency: (value, currency = 'BRL') => {
return new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(value);
},
getParam: (param) => new URLSearchParams(window.location.search).get(param)
};
// ----------------------------------------------
// 3. MÓDULOS POR NICHO (ativo conforme configuração)
// ----------------------------------------------
const modules = {
// E-COMMERCE: carrinho, wishlist, frete
ecommerce: () => {
utils.log('Modulo E-commerce ativado');
// Exemplo: adicionar produto ao carrinho via data-attributes
document.querySelectorAll('[data-add-to-cart]').forEach(btn => {
btn.addEventListener('click', (e) => {
const produto = {
id: btn.dataset.productId,
nome: btn.dataset.productName,
preco: parseFloat(btn.dataset.productPrice)
};
utils.log('Produto adicionado:', produto);
// Aqui você pode salvar no localStorage ou enviar para API
});
});
},
// BLOG: comentários dinâmicos, busca, share
blog: () => {
utils.log('Modulo Blog ativado');
// Busca em tempo real
const searchInput = document.getElementById('blog-search');
if (searchInput) {
searchInput.addEventListener('input', (e) => {
const term = e.target.value.toLowerCase();
document.querySelectorAll('.post-card').forEach(card => {
const title = card.querySelector('.post-title')?.innerText.toLowerCase();
card.style.display = title?.includes(term) ? 'block' : 'none';
});
});
}
},
// PORTFÓLIO: lightbox, filtro por categoria
portfolio: () => {
utils.log('Modulo Portfolio ativado');
// Lightbox simples
document.querySelectorAll('[data-lightbox]').forEach(img => {
img.addEventListener('click', () => {
const modal = document.createElement('div');
modal.style.cssText = 'position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.8); display:flex; justify-content:center; align-items:center; z-index:9999;';
modal.innerHTML = `<img src="${img.src}" style="max-width:90%; max-height:90%;">`;
modal.addEventListener('click', () => modal.remove());
document.body.appendChild(modal);
});
});
},
// SAAS: formulários inteligentes, gráficos
saas: () => {
utils.log('Modulo SaaS ativado');
// Exemplo: validação avançada de formulário
const forms = document.querySelectorAll('form[data-validate]');
forms.forEach(form => {
form.addEventListener('submit', (e) => {
const required = form.querySelectorAll('[required]');
let valid = true;
required.forEach(field => {
if (!field.value.trim()) {
valid = false;
field.classList.add('error');
} else {
field.classList.remove('error');
}
});
if (!valid) e.preventDefault();
});
});
},
// MÓDULO PADRÃO (se nenhum nicho específico for informado)
geral: () => {
utils.log('Modulo Geral ativado - funcionalidades comuns');
// Adiciona classe para links externos
document.querySelectorAll('a[href^="http"]:not([href*="' + location.hostname + '"])').forEach(link => {
link.setAttribute('target', '_blank');
link.setAttribute('rel', 'noopener noreferrer');
});
}
};
// ----------------------------------------------
// 4. INICIALIZAÇÃO BASEADA NO NICHO
// ----------------------------------------------
function init() {
utils.log('Inicializando para o nicho:', config.niche);
// Executa módulo específico ou fallback para 'geral'
const activeModule = modules[config.niche] || modules.geral;
activeModule();
// Evento global de clique monitorado (exemplo de GA personalizado)
document.addEventListener('click', (e) => {
const target = e.target.closest('[data-track]');
if (target) {
utils.log('Evento rastreado:', target.dataset.track);
// Enviar para Google Analytics, Mixpanel, etc.
}
});
}
// Aguarda o DOM
utils.onReady(init);
})();
```
🎯 Como usar para QUALQUER nicho
1. Copie o código para um arquivo .js ou cole no console do navegador (para testes).
2. Altere a propriedade config.niche conforme seu projeto:
· 'ecommerce' → ativa módulo de carrinho, frete, wishlist
· 'blog' → busca em tempo real, compartilhamento
· 'portfolio' → lightbox, filtro por categoria
· 'saas' → validação de formulários, dashboards
· 'geral' → links externos, logs úteis
3. Personalize cada módulo adicionando funções específicas do seu negócio (ex: integração com WhatsApp, pop-up de e-mail, slider de depoimentos).
🔧 Exemplo de adaptação para nicho "veterinário"
```javascript
// Basta adicionar um novo objeto em "modules"
veterinario: () => {
utils.log('Módulo Veterinário');
// Calculadora de IMC para pets
const formIMC = document.getElementById('pet-imc');
if (formIMC) {
formIMC.addEventListener('submit', (e) => {
e.preventDefault();
const peso = parseFloat(document.getElementById('peso').value);
const altura = parseFloat(document.getElementById('altura').value);
const imc = peso / (altura * altura);
alert(`IMC do pet: ${imc.toFixed(2)}`);
});
}
}
```
✅ Vantagens dessa abordagem
· Zero dependências (JavaScript puro)
· Fácil manutenção – cada nicho tem seu bloco isolado
· Debug simples com config.debug = true
· Expansível – basta criar novos módulos e chamar config.niche = 'novo'
Se precisar de um módulo específico para um nicho que não listei (imobiliário, educação, eventos, etc.), me diga que eu escrevo o código sob medida!
Perfeito! Agora entendi: você quer os códigos essenciais (blocos fundamentais) que servem como base para criar qualquer script JavaScript personalizado, independentemente do nicho.
Abaixo estão os principais padrões de código que você vai usar em 90% dos projetos. Copie, cole e adapte conforme sua necessidade.
---
1. 🚀 Estrutura base – IIFE ou DOMContentLoaded
Garante que o código só execute depois que a página carregar.
```javascript
// Opção 1: Evento DOMContentLoaded (mais comum)
document.addEventListener('DOMContentLoaded', function() {
// Seu código aqui
});
// Opção 2: IIFE (Immediately Invoked Function Expression) – não polui escopo global
(function() {
'use strict';
// Seu código aqui
})();
```
---
2. 🎯 Selecionar elementos do DOM
```javascript
// Por ID
const meuBotao = document.getElementById('meuBotao');
// Por classe (retorna HTMLCollection)
const todosBotoes = document.getElementsByClassName('botao');
// Por seletor CSS (primeiro elemento)
const primeiroLink = document.querySelector('a.link');
// Todos os elementos que batem com o seletor
const todosOsCards = document.querySelectorAll('.card');
```
---
3. 🖱️ Adicionar eventos
```javascript
// Clique
meuBotao.addEventListener('click', function(event) {
console.log('Clicou!');
// event.preventDefault() para evitar comportamento padrão (ex: envio de form)
});
// Submit de formulário
const form = document.getElementById('meuForm');
form.addEventListener('submit', function(e) {
e.preventDefault(); // impede recarregar a página
// Pega valores dos campos
const nome = document.getElementById('nome').value;
});
// Tecla pressionada
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
console.log('ESC pressionado');
}
});
```
---
4. 📦 Manipular classes, estilos e atributos
```javascript
// Adicionar/remover classe
elemento.classList.add('ativo');
elemento.classList.remove('inativo');
elemento.classList.toggle('visivel'); // se tem, remove; se não, adiciona
// Alterar estilo direto
elemento.style.backgroundColor = 'red';
elemento.style.display = 'none';
// Atributos
img.setAttribute('src', 'nova-imagem.jpg');
const valor = img.getAttribute('alt');
```
---
5. 🔁 Criar elementos dinamicamente
```javascript
const novoDiv = document.createElement('div');
novoDiv.textContent = 'Texto criado via JS';
novoDiv.classList.add('meu-bloco');
// Adicionar como filho
document.body.appendChild(novoDiv);
// Ou inserir em um local específico
const container = document.getElementById('container');
container.prepend(novoDiv); // no início
container.append(novoDiv); // no final
```
---
6. 🌐 Requisições HTTP (API / AJAX)
```javascript
// Usando fetch (moderno)
fetch('https://api.exemplo.com/dados')
.then(response => response.json())
.then(dados => {
console.log(dados);
// manipular os dados na página
})
.catch(erro => console.error('Erro:', erro));
// Enviar dados (POST)
fetch('https://api.exemplo.com/enviar', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nome: 'João', email: 'joao@email.com' })
})
.then(res => res.json())
.then(data => console.log('Resposta:', data));
```
---
7. 💾 Armazenamento local (LocalStorage)
```javascript
// Salvar dados
localStorage.setItem('tema', 'escuro');
localStorage.setItem('usuario', JSON.stringify({ id: 1, nome: 'Ana' }));
// Recuperar
const tema = localStorage.getItem('tema');
const usuario = JSON.parse(localStorage.getItem('usuario'));
// Remover
localStorage.removeItem('tema');
localStorage.clear(); // limpa tudo
```
---
8. ⏱️ Temporizadores e atrasos
```javascript
// Executar depois de X ms (setTimeout)
setTimeout(function() {
alert('Passaram 3 segundos');
}, 3000);
// Repetir a cada X ms (setInterval)
let contador = 0;
const intervalo = setInterval(() => {
console.log(++contador);
if (contador === 5) clearInterval(intervalo); // para após 5 vezes
}, 1000);
```
---
9. 🧩 Módulo reutilizável (padrão)
```javascript
// Cria um objeto com funções e propriedades isoladas
const MeuModulo = (function() {
let valorPrivado = 0;
function funcaoPrivada() {
console.log('Só pode ser chamada internamente');
}
return {
incrementar: function() {
valorPrivado++;
return valorPrivado;
},
resetar: function() {
valorPrivado = 0;
}
};
})();
// Uso:
MeuModulo.incrementar(); // 1
```
---
10. ✅ Validação de formulário simples
```javascript
function validarFormulario(event) {
const email = document.getElementById('email').value;
const senha = document.getElementById('senha').value;
if (!email.includes('@')) {
alert('Email inválido');
event.preventDefault();
return false;
}
if (senha.length < 6) {
alert('Senha precisa ter no mínimo 6 caracteres');
event.preventDefault();
return false;
}
return true;
}
// Aplicar no submit
form.addEventListener('submit', validarFormulario);
```
---
🧰 Como montar seu próprio script personalizado
Com esses blocos você cria qualquer coisa. Exemplo de combinação:
```javascript
document.addEventListener('DOMContentLoaded', () => {
// 1. Selecionar botão
const btn = document.querySelector('#carregar-dados');
// 2. Evento de clique
btn.addEventListener('click', () => {
// 3. Fetch na API
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(res => res.json())
.then(post => {
// 4. Criar elemento dinâmico
const div = document.createElement('div');
div.innerHTML = `<h2>${post.title}</h2><p>${post.body}</p>`;
document.getElementById('resultado').appendChild(div);
// 5. Salvar no localStorage
localStorage.setItem('ultimoPost', JSON.stringify(post));
});
});
});
```
---
📌 Dica final
Sempre comece com:
· 'use strict' no topo (evita erros silenciosos)
· Verifique se os elementos existem antes de manipulá-los (if (elemento) { ... })
· Use console.log() para debugar
Se precisar de um código pronto para uma situação específica (ex: slider de imagens, menu responsivo, contador de visitas), é só pedir!

