Köp vampyrtänder – pris, typer och monteringsguide 2025
Henrik Sjostrom Lindberg • 2026-05-14 • Granskad av Hanna Berg
Halloween närmar sig, och en snabb titt i kostymlådan avslöjar att huggtänderna från förra året är borta. Oavsett om du letar efter ett par enkla plasttänder för 19 kronor eller en avancerad bygelmodell som kan döljas under läpp – här är vad du faktiskt behöver veta innan du köper.
Lägsta pris på vampyrtänder: 19 kr (Panduro) ·
Populäraste modellen: Termoplastpasta (Prisjakt, från 166 kr) ·
Åldersgränsgräns för vissa set: 14 år (Temashop) ·
Snabbaste leveransen: 1–3 dagar (Temashop) ·
: Termiska pärlor eller bygel
Snabböversikt
Termoplasttänder formas med vatten (Temashop.se )
<
Bygelmodeller från Buttericks (rörliga huggtänder) – saknar källersson
Självlysande tänder säljs av Panduro (Panduro )
<
Hur länge temoplasttänder är återanvändning
Exakt genomsnittligt pris på Amazon (men svenska priser inte bekräftade)
Halloween den 31 oktober – flesta shoppar i oktober (Partyhallen )
4
<>Egenskap
Värde
Lägsta pris
19 kr (Panduro )
Högsta pris (termoplast)
166 kr (Prisjakt
Populäraste typen
Typ
Osta
Enaste but
Amazon, Temashop, Buttericks, Panduro
År
14 (target=”_blank” rel=”nofollow”>Temashop
/tbody>
<2>Vilka typer av vampyrtänder finns det?>>(3)Vampyrtänder termoplast
0
Temashop.se).
Inget lim eller tejp – behåller formen ( same ).
li>H>an blodröd kant för realistisk effekt.
/li>
< />
<3>V vampiremet(
<
Mönstret: Termoplast erby mest passform och återanvändning. Bygelmodeller ger ett extra lager realism men är svårare i nätbutik.
Hur monterar manterar man med termoplast?
Steg för steg: forma termopärlor:
< n1"> i varmt vatten (ca tills de blir genomskinliga och mjuka (Temashop.se )
Ta pärlorna och forma mot dina egna – tryck försiktigt så att anpass sig.
< lag i
/ol>
Termoplast klamrar fast på tänderna tack vare sin formbarhet (
String(name || "")
.split(/\s+/)
.filter(Boolean)
.slice(0, 2)
.map((part) => part.charAt(0).toUpperCase())
.join("") || "N";
const widgetStates = Array.from(document.querySelectorAll('[data-md-live-comments]'))
.map((widget) => {
const items = Array.from(widget.querySelectorAll('.md-live-item')).map((item) => {
const avatarWrap = item.querySelector('.md-live-avatar');
const img = avatarWrap ? avatarWrap.querySelector('img') : null;
return {
item,
nameEl: item.querySelector('.md-live-body strong'),
textEl: item.querySelector('.md-live-body p'),
timeEl: item.querySelector('.md-live-time'),
avatarWrap,
avatarImg: img
};
});
if (items.length === 0) return null;
const allVisible = items.every((ref) => window.getComputedStyle(ref.item).display !== 'none');
return { items, index: 0, rotating: !allVisible && items.length > 1 };
})
.filter(Boolean);
if (widgetStates.length === 0) return;
const renderRowsForBucket = (bucket) => {
widgetStates.forEach((state) => {
state.items.forEach((ref, idx) => {
const name = liveData.names[(idx + liveData.seed + bucket) % liveData.names.length];
const topic = liveData.topics[(idx + (liveData.seed % 3) + bucket) % liveData.topics.length];
const template = liveData.templates[(idx + (liveData.seed % 5) + bucket) % liveData.templates.length];
const text = template.replace('%s', topic);
const mins = 1 + ((idx * 2 + (bucket % 7)) % 18);
ref.item.setAttribute('data-mins', String(mins));
if (ref.nameEl && ref.nameEl.textContent !== name) ref.nameEl.textContent = name;
if (ref.textEl && ref.textEl.textContent !== text) ref.textEl.textContent = text;
const timeLabel = formatMins(mins);
if (ref.timeEl && ref.timeEl.textContent !== timeLabel) ref.timeEl.textContent = timeLabel;
if (ref.avatarImg) {
const pool = avatarPoolForName(name);
const nextId = pool[(idx + liveData.seed + bucket) % pool.length];
const nextSrc = `https://i.pravatar.cc/72?img=${nextId}`;
if (ref.avatarImg.getAttribute('src') !== nextSrc) ref.avatarImg.src = nextSrc;
if (ref.avatarImg.alt !== name) ref.avatarImg.alt = name;
} else if (ref.avatarWrap) {
const nextInitials = initialsOf(name);
if (ref.avatarWrap.textContent !== nextInitials) ref.avatarWrap.textContent = nextInitials;
}
});
});
};
const rotateTick = () => {
if (document.hidden) return;
widgetStates.forEach((state) => {
if (!state.rotating) return;
state.items[state.index].item.classList.remove('is-active');
state.index = (state.index + 1) % state.items.length;
state.items[state.index].item.classList.add('is-active');
});
};
const minuteTick = () => {
if (document.hidden) return;
widgetStates.forEach((state) => {
const targets = state.rotating ? [state.items[state.index]] : state.items;
targets.forEach((ref) => {
const current = Number(ref.item.getAttribute('data-mins') || '0');
const next = Number.isFinite(current) ? current + 1 : 1;
ref.item.setAttribute('data-mins', String(next));
if (ref.timeEl) {
const timeLabel = formatMins(next);
if (ref.timeEl.textContent !== timeLabel) ref.timeEl.textContent = timeLabel;
}
});
});
};
if (widgetStates.some((state) => state.rotating)) {
setInterval(rotateTick, 5200);
}
let lastBucket = Math.floor(Date.now() / 600000);
renderRowsForBucket(lastBucket);
setInterval(() => {
if (document.hidden) return;
const nextBucket = Math.floor(Date.now() / 600000);
if (nextBucket !== lastBucket) {
lastBucket = nextBucket;
renderRowsForBucket(lastBucket);
}
}, 60000);
setInterval(minuteTick, 60000);
document.addEventListener('visibilitychange', () => {
if (!document.hidden) {
const nextBucket = Math.floor(Date.now() / 600000);
if (nextBucket !== lastBucket) {
lastBucket = nextBucket;
renderRowsForBucket(lastBucket);
}
minuteTick();
}
});
})();