Close Menu
Safar SeptyadiSafar Septyadi
    Instagram LinkedIn WhatsApp
    Instagram LinkedIn WhatsApp
    Safar SeptyadiSafar Septyadi
    • Home
    • Programmer
      1. Coding
      2. View All
      Kirim Email Pakai Mail() di CPanel Tidak Bisa Ini Penyebabnya!

      Kirim Email Pakai Mail() di CPanel Tidak Bisa? Ini Penyebabnya!

      March 15, 2025
      Swagger Cara Membuat Dokumentasi API Laravel Otomatis

      Swagger: Cara Membuat Dokumentasi API Laravel Otomatis

      January 24, 2025
      Membuat Responsive Layout Tanpa Media Query di CSS

      Membuat Responsive Layout Tanpa Media Query di CSS

      January 18, 2025
      Hindari Error Relasi Kosong di Laravel dengan withDefault

      Hindari Error Relasi Kosong di Laravel dengan withDefault

      January 5, 2025
      Kenapa Harus Pakai Visual Studio Code untuk Ngoding

      Kenapa Harus Pakai Visual Studio Code untuk Ngoding?

      March 27, 2025
      3 Konsep Utama Belajar Frontend Framework

      3 Konsep Utama Belajar Frontend Framework

      February 23, 2025
      Takut Persaingan di Dunia Programmer Coba Jadi Data Scientist!

      Takut Persaingan di Dunia Programmer? Coba Jadi Data Scientist!

      February 21, 2025
      React.js Resmi Men-deprecate Create-React-App

      React.js Resmi Men-deprecate Create-React-App

      February 19, 2025
    • Teknologi
      1. Berita
      2. Digital Marketing
      3. Tutorial
      4. View All
      Viral #KaburAjaDulu Ungkapan Kekecewaan atau Harapan Baru

      Viral #KaburAjaDulu: Ungkapan Kekecewaan atau Harapan Baru?

      February 17, 2025
      Viral, Usia Pensiun Jadi 59 Tahun Ini Maksudnya

      Viral, Usia Pensiun Jadi 59 Tahun? Ini Maksudnya

      January 12, 2025
      Keluh Kesah Pengguna Coretax Faktur Pajak Gagal Terbit

      Keluh Kesah Pengguna Coretax: Faktur Pajak Gagal Terbit?

      January 7, 2025
      Upah Minimum Provinsi Terbaru 2025 Seluruh Indonesia

      Upah Minimum Provinsi Terbaru 2025 Seluruh Indonesia

      December 28, 2024
      Jasa SEO Bulanan Terbaik Optimasi Website Berkelanjutan untuk Ranking #1!

      Jasa SEO Bulanan Terbaik: Optimasi Website Berkelanjutan untuk Ranking #1!

      March 18, 2025
      Mengapa Desain Logo Harus Menarik Ini 7 Alasannya!

      Mengapa Desain Logo Harus Menarik? Ini 7 Alasannya!

      January 10, 2025
      Stop Beli Followers! Ubah Mindset Agar Sosmed Cepat Growth

      Stop Beli Followers! Ubah Mindset Agar Sosmed Cepat Growth

      October 30, 2024
      Fenomena Lowongan Kerja di Bidang Sosial Media

      Fenomena Lowongan Kerja di Bidang Sosial Media

      October 22, 2024
      Cara Login Instagram Help us confirm you own this account

      Cara Login Instagram: Help us confirm you own this account

      March 6, 2025
      Tukar Pulsa ke OVO

      Cara Mudah Tukar Pulsa ke OVO Rate Tinggi Hanya 5 Menit

      January 22, 2025
      Membuat Responsive Layout Tanpa Media Query di CSS

      Membuat Responsive Layout Tanpa Media Query di CSS

      January 18, 2025
      Keyword Brand Kamu Kena Spam Situs Judi Online? Ini Solusinya!

      Keyword Brand Kamu Kena Spam Situs Judi Online? Ini Solusinya!

      January 15, 2025
      Rekomendasi Laptop AI 2025 Biar Aktivitas Harian Kamu Makin Ringan

      Rekomendasi Laptop AI 2025: Biar Aktivitas Harian Kamu Makin Ringan

      May 10, 2025
      Cara Gampang Download Video Short Youtube! Sat Set!

      Cara Gampang Download Video Short YouTube! Sat Set!

      March 9, 2025
      Loading Website WordPress Kamu Lambat Coba Cara Ini!

      Loading Website WordPress Kamu Lambat? Coba Cara Ini!

      March 8, 2025
      Cara Login Instagram Help us confirm you own this account

      Cara Login Instagram: Help us confirm you own this account

      March 6, 2025
    • Dunia Kerja
      1. Freelance
      2. Kerja Online
      3. Bisnis
      4. Pendidikan
      5. Pengembangan Diri
      6. View All
      5 Ide Usaha yang Cocok untuk Mahasiswa Peluang Sambil Kuliah

      5 Ide Usaha yang Cocok untuk Mahasiswa: Peluang Sambil Kuliah

      October 15, 2024
      Lowongan Kerja Part Time Online di Rumah untuk Pelajar

      Lowongan Kerja Part Time Online di Rumah untuk Pelajar

      September 22, 2024
      Tips Cara Menjawab Language Knowledge Verification di UHRS

      Tips Cara Menjawab Language Knowledge Verification di UHRS

      August 13, 2024
      5 Jenis Kerja Part Time yang Paling Dicari di 2024

      5 Jenis Kerja Part Time yang Paling Dicari di 2024

      August 11, 2024
      Tips Agar Banyak yang Order Backlink di Seedbacklink

      Tips Agar Banyak yang Order Backlink di Seedbacklink

      March 4, 2025
      Mau Jualan Di Tiktok Ini Cara Daftar TikTok Shop Untuk Pemula

      Mau Jualan Di Tiktok? Ini Cara Daftar TikTok Shop Untuk Pemula

      January 2, 2025
      5 Kebiasaan Saat WFH yang Bisa Menurunkan Produktivitas

      5 Kebiasaan Saat WFH yang Bisa Menurunkan Produktivitas

      December 13, 2024
      Apa Itu Digital Nomad Gaya Hidup di Era Kerja Remote

      Apa Itu Digital Nomad? Gaya Hidup di Era Kerja Remote

      November 26, 2024
      Jangan Salah Langkah! Ini Cara Cerdas Urus Pendirian & Izin Usaha yang Mudah

      Jangan Salah Langkah! Ini Cara Cerdas Urus Pendirian & Izin Usaha yang Mudah

      February 27, 2025
      Transformasi Digital dalam Bisnis Mengapa Perusahaan Harus Beradaptasi

      Transformasi Digital dalam Bisnis: Mengapa Perusahaan Harus Beradaptasi?

      February 26, 2025
      Jakarta Garden City Calon Pusat Bisnis & Hunian Berkelas

      Jakarta Garden City: Calon Pusat Bisnis & Hunian Berkelas

      February 16, 2025
      Peluang Usaha Hotel Kecil yang Menguntungkan Di Era Sekarang

      Peluang Usaha Hotel Kecil yang Menguntungkan Di Era Sekarang

      January 28, 2025
      Daftar Pertanyaan Umum Untuk LPDP, Biar Lolos Interview!

      Daftar Pertanyaan Umum Untuk LPDP, Biar Lolos Interview!

      March 16, 2025
      Universitas Nasional Surakarta (UNASURAKARTA): Kuliah Murah dan Berkualitas di Solo

      Universitas Nasional Surakarta (UNASURAKARTA): Kuliah Murah dan Berkualitas di Solo

      December 19, 2024
      Info Beasiswa Luar Negeri S1S2S3 Di Benua Asia Terupdate!

      Info Beasiswa Luar Negeri S1/S2/S3 Di Asia Terupdate!

      September 27, 2024
      Info Beasiswa S1S2S3 Dalam Negeri Terupdate!

      Info Beasiswa S1/S2/S3 Dalam Negeri Terupdate!

      September 24, 2024
      Kita Tidak Sepenting Itu The Power of Bodoamat!

      Kita Tidak Sepenting Itu: The Power of Bodoamat!

      March 20, 2025
      5 Kebiasaan Ini Bisa Meningkatkan Daya Pikir Otak Kamu!

      5 Kebiasaan Ini Bisa Meningkatkan Daya Pikir Otak Kamu!

      March 12, 2025
      Jangan Mengajarkan Orang “Berenang” Diwaktu Yang Salah

      Jangan Mengajarkan Orang “Berenang” Diwaktu Yang Salah

      February 15, 2025
      5 Pelatihan Pengembangan Diri yang Wajib Dicoba!

      5 Pelatihan Pengembangan Diri yang Wajib Dicoba!

      February 13, 2025
      Haruskah Mencintai Pekerjaan Kita

      Haruskah Mencintai Pekerjaan Kita?

      March 30, 2025
      Lama Menganggur Bukan Berarti Gak Kompeten!

      Lama Menganggur Bukan Berarti Gak Kompeten!

      March 21, 2025
      9 Realita Pahit di Dunia Kerja, Yang Diluar Pikiran Kamu

      9 Realita Pahit di Dunia Kerja, Yang Diluar Pikiran Kamu

      March 19, 2025
      Perbedaan Human Resources dengan Human Capital

      Perbedaan Human Resources dengan Human Capital

      March 13, 2025
    • Aplikasi
      • Kalkulator Perhitungan Pesangon
      • Kalkulator Perhitungan THR
      • Kalkulator Perhitungan Hak Cuti Diuangkan
      • Kalkulator Perhitungan Upah Lembur
      • Cek Daftar Loker Penipu
      • Rekomendasi Tanggal Cuti
    • Lowongan Kerja
    • Games
    Safar SeptyadiSafar Septyadi
    Coding

    Cara membuat animasi gosok kartu menggunakan Javascript

    Safar SeptyadiBy Safar SeptyadiJanuary 15, 2024No Comments7 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    animasi gosok kartu menggunakan Javascript
    Animasi Gosok kartu menggunakan Javascript
    Share
    Facebook Twitter LinkedIn Pinterest Email

    Kali ini saya akan membagikan salah satu pengalaman project website saya, yaitu membuat sebuah website doorprize dengan animasi gosok kartu atau scratch cards. Sebelum saya mulai, mari kita pahami terlebih dahulu apa itu animasi gosok kartu atau scratch cards. Animasi gosok kartu adalah efek visual yang mirip dengan menggosok kartu voucher atau kartu hadiah untuk mengungkapkan konten tersembunyi di bawahnya. Dalam konteks website, animasi ini digunakan untuk memberikan pengalaman interaktif kepada pengguna, di mana mereka dapat “menggosok” kartu virtual untuk mengungkapkan konten atau hadiah yang tersembunyi di bawahnya.

    Pada project ini saya hanya menggunakan HTML, CSS dan Javascript dan menggunakan 2 plugin javascript untuk mempermudah dan mempercepat proses developmentnya yaitu menggunakan jquery dan js-confetti.

    Daftar Isi

    • Penggunaan HTML untuk Struktur Dasar
    • Menyiapkan CSS untuk Penampilan Visual
    • Menambahkan Interaksi dengan JavaScript
    • Implementasi Lengkap HTML, CSS, Javascript
    • Kesimpulan
    • Demo dan Download

    Penggunaan HTML untuk Struktur Dasar

    Pertama-tama, saya akan menggunakan HTML untuk membuat struktur dasarnya terlebih dahulu. Berikut adalah contoh kode HTML sederhana yang akan saya gunakan:

    <div id="container">
    	<div class="container" id="js-container">
    	<canvas class="canvas" id="js-canvas" width="355" height="225"></canvas>
    	<div class="notif">
    		<h2>Selamat</h2>
        <h1>Kamu Menang!!</h1>
        <h1>Mobil</h1>
    		<h3>Pin kamu: 232323</h3>
    		</div>
    	</div>  
    	</div>
    </div>

    Dalam struktur ini, saya membuat div dengan id container yang mengelilingi elemen utamanya. Di dalamnya, ada elemen <div> dengan kelas canvas, yang berisi gambar latar belakang kanvas untuk menggosok, dan teks hadiah. Dan <div> dengan class notif adalah informasi yang akan ditampilkan ke use setelah menggosok kartu.

    Menyiapkan CSS untuk Penampilan Visual

    Selanjutnya, saya akan memberikan style untuk tampilan visual dari class div yang kita miliki menggunakan CSS. Berikut adalah contoh kode CSS yang saya gunakan:

    body {
       margin:0;
       padding:0;
       font-family:'Arial';
       width:100%;
       height:100vh;
       overflow-x: hidden;
       background: linear-gradient(90deg, rgba(238,58,70,1) 0%, rgba(162,33,113,1) 100%) fixed;
       display: flex;
       align-items: center;
       justify-content: center;
    }
    
    .container {
       border: 3px solid yellow;
       background-color:white;
       border-radius:20px;
       width: 355px;
       height: 225px;
       margin: auto;
       -webkit-user-select: none;
       -moz-user-select: none;
       -ms-user-select: none; 
       -o-user-select: none;
       user-select: none;
    }
    
    .canvas {
       position: absolute;
       border-radius:20px;
       cursor: url('coin.png'), pointer;  
    }
    
    .notif {
       padding: 0px;
       text-align:center;
    }

    Dalam CSS ini, saya mendefinisikan tata letak dan gaya visual untuk container animasi gosok kartu, elemen gosok kartu itu sendiri, gambar latar belakang, kanvas gosok, dan teks hadiah.

    Menambahkan Interaksi dengan JavaScript

    Sekarang, mari kita berikan animasi ke dalam id div yang telah kita buat menggunakan JavaScript. Berikut adalah contoh kode JavaScript yang akan menambahkan interaksi ke animasi tersebut:

    (function() {
      
      'use strict';
    
      var base_url = window.location.origin;
      var isDrawing, lastPoint;
      var container    = document.getElementById('js-container'),
          canvas       = document.getElementById('js-canvas'),
          canvasWidth  = canvas.width,
          canvasHeight = canvas.height,
          ctx          = canvas.getContext('2d'),
          image        = new Image(),
          brush        = new Image();
      // base64 Workaround because Same-Origin-Policy
      image.src = 'card.png';
      image.onload = function() {
        ctx.drawImage(image, 0, 0);
        // Show the form when Image is loaded.
        document.querySelectorAll('.notif')[0].style.visibility = 'visible';
      };
      brush.src = 'brush.png';
      
      canvas.addEventListener('mousedown', handleMouseDown, false);
      canvas.addEventListener('touchstart', handleMouseDown, false);
      canvas.addEventListener('mousemove', handleMouseMove, false);
      canvas.addEventListener('touchmove', handleMouseMove, false);
      canvas.addEventListener('mouseup', handleMouseUp, false);
      canvas.addEventListener('touchend', handleMouseUp, false);
      
      function distanceBetween(point1, point2) {
        return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
      }
      
      function angleBetween(point1, point2) {
        return Math.atan2( point2.x - point1.x, point2.y - point1.y );
      }
      
      // Only test every `stride` pixel. `stride`x faster,
      // but might lead to inaccuracy
      function getFilledInPixels(stride) {
        if (!stride || stride < 1) { stride = 1; }
        
        var pixels   = ctx.getImageData(0, 0, canvasWidth, canvasHeight),
            pdata    = pixels.data,
            l        = pdata.length,
            total    = (l / stride),
            count    = 0;
        
        // Iterate over all pixels
        for(var i = count = 0; i < l; i += stride) {
          if (parseInt(pdata[i]) === 0) {
            count++;
          }
        }
        
        return Math.round((count / total) * 100);
      }
      
      function getMouse(e, canvas) {
        var offsetX = 0, offsetY = 0, mx, my;
    
        if (canvas.offsetParent !== undefined) {
          do {
            offsetX += canvas.offsetLeft;
            offsetY += canvas.offsetTop;
          } while ((canvas = canvas.offsetParent));
        }
    
        mx = (e.pageX || e.touches[0].clientX) - offsetX;
        my = (e.pageY || e.touches[0].clientY) - offsetY;
    
        return {x: mx, y: my};
      }
      
      function handlePercentage(filledInPixels) {
        filledInPixels = filledInPixels || 0;
        if (filledInPixels > 60) {
          canvas.parentNode.removeChild(canvas);
          // confetti.start();
          const canvasa = document.getElementById('js-canvas')
          const jsConfetti = new JSConfetti({ canvasa })
          setTimeout(() => {
            jsConfetti.addConfetti()
          }, 0)
          setTimeout(() => {
            jsConfetti.addConfetti()
          }, 2000)
          setTimeout(() => {
            jsConfetti.addConfetti()
          }, 4000)
    
          // alert("success");
        }
      }
      
      function handleMouseDown(e) {
        isDrawing = true;
        lastPoint = getMouse(e, canvas);
      }
    
      function handleMouseMove(e) {
        if (!isDrawing) { return; }
        
        e.preventDefault();
    
        var currentPoint = getMouse(e, canvas),
            dist = distanceBetween(lastPoint, currentPoint),
            angle = angleBetween(lastPoint, currentPoint),
            x, y;
        
        for (var i = 0; i < dist; i++) {
          x = lastPoint.x + (Math.sin(angle) * i) - 25;
          y = lastPoint.y + (Math.cos(angle) * i) - 25;
          ctx.globalCompositeOperation = 'destination-out';
          ctx.drawImage(brush, x, y);
        }
        
        lastPoint = currentPoint;
        handlePercentage(getFilledInPixels(10));
      }
    
      function handleMouseUp(e) {
        isDrawing = false;
      }
      
    })();

    Dalam JavaScript ini, kita menggunakan jQuery untuk memudahkan manajemen elemen HTML. Kode ini bertanggung jawab atas penggambaran gambar latar belakang pada kanvas, mengaktifkan gosokan saat pengguna menekan atau menggeser mouse atau layar sentuh, dan memeriksa apakah gosokan sudah selesai dan menampilkan hadiah jika iya.

    Implementasi Lengkap HTML, CSS, Javascript

    Berikut adalah implementasi lengkap animasi yang telah kita buat menggunakan HTML, CSS, dan JavaScript:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="utf-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1">
    	<title>Scratch</title>
    
    	<style type="text/css">
    	body {
            margin:0;
            padding:0;
            font-family:'Arial';
            width:100%;
            height:100vh;
            overflow-x: hidden;
            background: linear-gradient(90deg, rgba(238,58,70,1) 0%, rgba(162,33,113,1) 100%) fixed;
            display: flex;
            align-items: center;
            justify-content: center;
    	}
    
    	.container {
            border: 3px solid yellow;
            background-color:white;
            border-radius:20px;
            width: 355px;
            height: 225px;
            margin: auto;
            -webkit-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none; 
            -o-user-select: none;
            user-select: none;
    	}
    
    	.canvas {
            position: absolute;
            border-radius:20px;
            cursor: url('coin.png'), pointer;  
    	}
    
    	.notif {
            padding: 0px;
            text-align:center;
    	}
    	</style>
    </head>
    <body>
    <script
      src="https://code.jquery.com/jquery-3.5.1.min.js"
      integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
      crossorigin="anonymous"></script>
      <script src="https://cdn.jsdelivr.net/npm/js-confetti@0.9.0/dist/js-confetti.browser.js"></script>
    <div id="container">
    	<div class="container" id="js-container">
    	<canvas class="canvas" id="js-canvas" width="355" height="225"></canvas>
    	<div class="notif">
    		<h2>Selamat</h2>
        <h1>Kamu Menang!!</h1>
        <h1>Mobil</h1>
    		<h3>Pin kamu: 232323</h3>
    		</div>
    	</div>  
    	</div>
    </div>
    <script>
    
    (function() {
      
      'use strict';
    
      var base_url = window.location.origin;
      var isDrawing, lastPoint;
      var container    = document.getElementById('js-container'),
          canvas       = document.getElementById('js-canvas'),
          canvasWidth  = canvas.width,
          canvasHeight = canvas.height,
          ctx          = canvas.getContext('2d'),
          image        = new Image(),
          brush        = new Image();
      // base64 Workaround because Same-Origin-Policy
      image.src = 'card.png';
      image.onload = function() {
        ctx.drawImage(image, 0, 0);
        // Show the form when Image is loaded.
        document.querySelectorAll('.notif')[0].style.visibility = 'visible';
      };
      brush.src = 'brush.png';
      
      canvas.addEventListener('mousedown', handleMouseDown, false);
      canvas.addEventListener('touchstart', handleMouseDown, false);
      canvas.addEventListener('mousemove', handleMouseMove, false);
      canvas.addEventListener('touchmove', handleMouseMove, false);
      canvas.addEventListener('mouseup', handleMouseUp, false);
      canvas.addEventListener('touchend', handleMouseUp, false);
      
      function distanceBetween(point1, point2) {
        return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
      }
      
      function angleBetween(point1, point2) {
        return Math.atan2( point2.x - point1.x, point2.y - point1.y );
      }
      
      // Only test every `stride` pixel. `stride`x faster,
      // but might lead to inaccuracy
      function getFilledInPixels(stride) {
        if (!stride || stride < 1) { stride = 1; }
        
        var pixels   = ctx.getImageData(0, 0, canvasWidth, canvasHeight),
            pdata    = pixels.data,
            l        = pdata.length,
            total    = (l / stride),
            count    = 0;
        
        // Iterate over all pixels
        for(var i = count = 0; i < l; i += stride) {
          if (parseInt(pdata[i]) === 0) {
            count++;
          }
        }
        
        return Math.round((count / total) * 100);
      }
      
      function getMouse(e, canvas) {
        var offsetX = 0, offsetY = 0, mx, my;
    
        if (canvas.offsetParent !== undefined) {
          do {
            offsetX += canvas.offsetLeft;
            offsetY += canvas.offsetTop;
          } while ((canvas = canvas.offsetParent));
        }
    
        mx = (e.pageX || e.touches[0].clientX) - offsetX;
        my = (e.pageY || e.touches[0].clientY) - offsetY;
    
        return {x: mx, y: my};
      }
      
      function handlePercentage(filledInPixels) {
        filledInPixels = filledInPixels || 0;
        if (filledInPixels > 60) {
          canvas.parentNode.removeChild(canvas);
          // confetti.start();
          const canvasa = document.getElementById('js-canvas')
          const jsConfetti = new JSConfetti({ canvasa })
          setTimeout(() => {
            jsConfetti.addConfetti()
          }, 0)
          setTimeout(() => {
            jsConfetti.addConfetti()
          }, 2000)
          setTimeout(() => {
            jsConfetti.addConfetti()
          }, 4000)
    
          // alert("success");
        }
      }
      
      function handleMouseDown(e) {
        isDrawing = true;
        lastPoint = getMouse(e, canvas);
      }
    
      function handleMouseMove(e) {
        if (!isDrawing) { return; }
        
        e.preventDefault();
    
        var currentPoint = getMouse(e, canvas),
            dist = distanceBetween(lastPoint, currentPoint),
            angle = angleBetween(lastPoint, currentPoint),
            x, y;
        
        for (var i = 0; i < dist; i++) {
          x = lastPoint.x + (Math.sin(angle) * i) - 25;
          y = lastPoint.y + (Math.cos(angle) * i) - 25;
          ctx.globalCompositeOperation = 'destination-out';
          ctx.drawImage(brush, x, y);
        }
        
        lastPoint = currentPoint;
        handlePercentage(getFilledInPixels(10));
      }
    
      function handleMouseUp(e) {
        isDrawing = false;
      }
      
    })();
    </script>
    </body>
    </html>

    Baca juga: Javascript Format Input NPWP

    Kesimpulan

    Dengan menggabungkan HTML, CSS, dan JavaScript, kita dapat membuat animasi gosok kartu yang menarik dan interaktif. Animasi ini dapat memberikan pengalaman yang menyenangkan bagi pengguna website, terutama dalam konteks kontes atau promosi. Dengan mengikuti langkah-langkah di atas, kamu dapat membuat animasi gosok kartu sendiri dan mengintegrasikannya ke dalam proyek website kamu. Selamat mencoba!

    Demo dan Download

    Demo Animasi Gosok Kartu
    Download Code GitHub

    css html javascript
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Safar Septyadi
    • Website
    • Instagram

    Related Posts

    Kenapa Harus Pakai Visual Studio Code untuk Ngoding

    Kenapa Harus Pakai Visual Studio Code untuk Ngoding?

    March 27, 2025
    Kirim Email Pakai Mail() di CPanel Tidak Bisa Ini Penyebabnya!

    Kirim Email Pakai Mail() di CPanel Tidak Bisa? Ini Penyebabnya!

    March 15, 2025
    Cara Login Instagram Help us confirm you own this account

    Cara Login Instagram: Help us confirm you own this account

    March 6, 2025
    Leave A Reply Cancel Reply

    niagahoster
    Kerja Online
    Vendor UHRS
    4 Mins Read
    4 Vendor Terbaik untuk UHRS, Pembayaran Cepat dan Aman
    Freelance March 17, 2024

    Selamat datang, teman-teman! Semoga kalian semua baik-baik saja. Artikel kali ini, saya akan memberitahu kalian…

    Freelance UHRS

    Kerja Online Bisa Dapat Puluhan Juta dari Platform UHRS

    February 21, 2024
    Berapa Penghasilan Saya Perbulan dari UHRS

    Berapa Penghasilan Saya Perbulan dari UHRS?

    July 3, 2024
    Paling Populer
    • Ini Dia Daftar Alamat Loker Penipuan Interview!
    • Kerja Online Bisa Dapat Puluhan Juta dari Platform UHRS
    • Cara Cek Lulusan Universitas Seseorang Melalui Website Resmi
    • HR: Apa yang Akan Anda Lakukan Jika Diterima di Perusahaan Ini?
    • Mengapa Ada Pengiklan Anonim di Platform Lowongan Kerja?
    Partner
    Seedbacklink
    Instagram LinkedIn WhatsApp
    • About Me
    • Contact
    • Advertise with Us
    • Guest Post
    • Sitemap
    • Disclaimer
    • Terms of Service
    • Privacy Policy
    © 2021 - 2025 safarseptyadi.com. All Rights Reserved

    Type above and press Enter to search. Press Esc to cancel.