{"id":6,"date":"2026-08-02T23:37:24","date_gmt":"2026-08-02T22:37:24","guid":{"rendered":"https:\/\/cpstestmobile.com\/?page_id=6"},"modified":"2026-08-02T23:48:41","modified_gmt":"2026-08-02T22:48:41","slug":"cps-test","status":"publish","type":"page","link":"https:\/\/cpstestmobile.com\/","title":{"rendered":"CPS test: right-click 1 sec"},"content":{"rendered":"\n<style>\n    \/* Reset and Base Styles *\/\n    body {\n      font-family: Arial, sans-serif;\n      margin: 0;\n      padding: 0;\n      background: linear-gradient(135deg, #6e8efb, #a777e3);\n      color: #333;\n      min-height: 100vh;\n      display: flex;\n      flex-direction: column;\n      -webkit-user-select: none;\n      -webkit-tap-highlight-color: transparent;\n      user-select: none;\n    }\n    \n    \/* Main Content Area *\/\n    .content {\n      flex: 1;\n      max-width: 800px;\n      margin: 0 auto;\n      padding: 20px;\n      width: 100%;\n    }\n    \n    \/* Header Styling *\/\n    .header {\n      background: rgba(255, 255, 255, 0.9);\n      border-radius: 16px;\n      padding: 20px;\n      margin-bottom: 20px;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);\n      text-align: center;\n    }\n    \n    .h {\n      color: #2c3e50;\n      margin: 0 0 10px 0;\n      font-size: 28px;\n    }\n  .h2 {\n   \n      font-size: 28px;\n    }\n     .h3 {\n   \n      font-size: 24px;\n    }\n    .subtitle {\n      color: #000000;\n      margin: 0;\n      font-size: 16px;\n    }\n    \n    \/* Game Container *\/\n    .game-container {\n      background: rgba(255, 255, 255, 0.9);\n      border-radius: 16px;\n      padding: 20px;\n      margin-bottom: 20px;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);\n    }\n    \n    \/* Mode Selector *\/\n    .mode-selector {\n      display: flex;\n      justify-content: center;\n      gap: 10px;\n      margin: 20px 0;\n      flex-wrap: wrap;\n    }\n    \n    .mode-btn {\n      padding: 12px 18px;\n      background: #ecf0f1;\n      border: none;\n      border-radius: 50px;\n      font-weight: bold;\n      cursor: pointer;\n      transition: all 0.3s;\n      box-shadow: 0 2px 5px rgba(0,0,0,0.1);\n      flex-grow: 1;\n      max-width: 130px;\n    }\n    \n    .mode-btn.active {\n      background: #3498db;\n      color: white;\n      transform: scale(1.05);\n      box-shadow: 0 4px 8px rgba(0,0,0,0.2);\n    }\n    \n    \/* Tap Area *\/\n    #tap-area {\n      background: #2ecc71;\n      color: white;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      align-items: center;\n      cursor: pointer;\n      transition: all 0.2s;\n      border-radius: 20px;\n      min-height: 250px;\n      box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);\n      position: relative;\n      overflow: hidden;\n      margin: 20px 0;\n    }\n    \n    #tap-area:active {\n      background-color: #27ae60;\n      transform: scale(0.98);\n    }\n    \n    #tap-text {\n      font-size: 32px;\n      font-weight: bold;\n      z-index: 2;\n    }\n    \n    #countdown {\n      font-size: 80px;\n      font-weight: bold;\n      opacity: 0.2;\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -50%);\n      z-index: 1;\n    }\n    \n    \/* Stats Display *\/\n    .stats {\n      display: flex;\n      justify-content: space-around;\n      margin: 20px 0;\n    }\n    \n    .stat-box {\n      text-align: center;\n      padding: 10px;\n      flex: 1;\n    }\n    \n    .stat-value {\n      font-size: 28px;\n      font-weight: bold;\n      color: #2c3e50;\n    }\n    \n    .stat-label {\n      font-size: 14px;\n      color: #7f8c8d;\n      font-weight: 600;\n    }\n    \n    \/* Action Buttons *\/\n    .actions {\n      display: flex;\n      gap: 15px;\n      margin: 20px 0;\n    }\n    \n    .action-btn {\n      flex: 1;\n      padding: 15px;\n      border: none;\n      border-radius: 12px;\n      font-size: 16px;\n      font-weight: bold;\n      cursor: pointer;\n      transition: all 0.3s;\n      box-shadow: 0 4px 10px rgba(0,0,0,0.15);\n    }\n    \n    #share-btn {\n      background: #3498db;\n      color: white;\n    }\n    \n    #share-btn:hover {\n      background: #2980b9;\n    }\n    \n    #reset-btn {\n      background: #e74c3c;\n      color: white;\n    }\n    \n    #reset-btn:hover {\n      background: #c0392b;\n    }\n    \n    \/* Results Section *\/\n    .results {\n      background: rgba(255, 255, 255, 0.9);\n      border-radius: 16px;\n      padding: 20px;\n      margin-bottom: 20px;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);\n      text-align: center;\n    }\n    \n    .highlight {\n      color: #e74c3c;\n      font-weight: bold;\n    }\n    \n    \/* Footer *\/\n    .footer {\n      text-align: center;\n      padding: 20px;\n      color: white;\n      font-size: 14px;\n    }\n    \n    \/* Animation *\/\n    .pulse {\n      animation: pulseAnimation 0.5s;\n    }\n    \n    @keyframes pulseAnimation {\n      0% { transform: scale(1); }\n      50% { transform: scale(1.05); }\n      100% { transform: scale(1); }\n    }\n    \n    \/* Popup Modal *\/\n    .modal-overlay {\n      position: fixed;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      background: rgba(0, 0, 0, 0.7);\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      z-index: 1000;\n      opacity: 0;\n      visibility: hidden;\n      transition: all 0.3s ease;\n    }\n    \n    .modal-overlay.active {\n      opacity: 1;\n      visibility: visible;\n    }\n    \n    .modal-content {\n      background: white;\n      border-radius: 20px;\n      padding: 30px;\n      width: 90%;\n      max-width: 400px;\n      text-align: center;\n      box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n      transform: translateY(50px);\n      transition: transform 0.5s ease;\n    }\n    \n    .modal-overlay.active .modal-content {\n      transform: translateY(0);\n    }\n    \n    .modal-title {\n      font-size: 24px;\n      color: #2c3e50;\n      margin-bottom: 20px;\n    }\n    \n    .modal-stats {\n      display: flex;\n      justify-content: space-around;\n      margin: 20px 0;\n    }\n    \n    .modal-stat {\n      text-align: center;\n    }\n    \n    .modal-stat-value {\n      font-size: 32px;\n      font-weight: bold;\n      color: #2c3e50;\n    }\n    \n    .modal-stat-label {\n      font-size: 14px;\n      color: #7f8c8d;\n      font-weight: 600;\n    }\n    \n    .modal-message {\n      margin: 20px 0;\n      font-size: 16px;\n    }\n    \n    .modal-actions {\n      display: flex;\n      gap: 15px;\n      margin-top: 20px;\n    }\n    \n    .modal-btn {\n      flex: 1;\n      padding: 12px;\n      border: none;\n      border-radius: 12px;\n      font-size: 16px;\n      font-weight: bold;\n      cursor: pointer;\n      transition: all 0.3s;\n      box-shadow: 0 4px 10px rgba(0,0,0,0.15);\n    }\n    \n    .modal-close {\n      background: #3498db;\n      color: white;\n    }\n    \n    .modal-close:hover {\n      background: #2980b9;\n    }\n    \n    .modal-share {\n      background: #2ecc71;\n      color: white;\n    }\n    \n    .modal-share:hover {\n      background: #27ae60;\n    }\n    \n    \/* Confetti animation *\/\n    @keyframes confettiFall {\n      0% { transform: translateY(-100px) rotate(0deg); opacity: 1; }\n      100% { transform: translateY(100vh) rotate(360deg); opacity: 0; }\n    }\n    \n    .confetti {\n      position: fixed;\n      width: 10px;\n      height: 10px;\n      background: #ff0;\n      opacity: 0;\n      z-index: 100;\n    }\n    \n    \/* Responsive Design *\/\n    @media (max-width: 600px) {\n      .content {\n        padding: 10px;\n      }\n      \n      .h {\n        font-size: 24px;\n      }\n      \n      .mode-btn {\n        padding: 10px 15px;\n        font-size: 14px;\n      }\n      \n      #tap-text {\n        font-size: 28px;\n      }\n      \n      #countdown {\n        font-size: 60px;\n      }\n      \n      .stat-value {\n        font-size: 24px;\n      }\n      \n      .action-btn {\n        padding: 12px;\n        font-size: 14px;\n      }\n      \n      .modal-content {\n        padding: 20px;\n      }\n      \n      .modal-title {\n        font-size: 20px;\n      }\n      \n      .modal-stat-value {\n        font-size: 28px;\n      }\n      \n      .modal-actions {\n        flex-direction: column;\n      }\n    }\n  <\/style>\n  <div class='content'>\n    <div class='header'>\n      <p class='subtitle'>Tap on your phone and check your score CPS. Repeat the test several times until you get a good result, then share it with your friends and challenge them.<\/p>\n    <\/div>\n    \n    <div class='game-container'>\n      <div class='mode-selector'>\n        <button class='mode-btn' data-time='5'>5 Seconds<\/button>\n        <button class='mode-btn' data-time='15'>15 Seconds<\/button>\n        <button class='mode-btn active' data-time='30'>30 Seconds<\/button>\n        <button class='mode-btn' data-time='60'>60 Seconds<\/button>\n      <\/div>\n      \n      <div id='tap-area'>\n        <div id='tap-text'>Start Test<\/div>\n        <div id='countdown'>30<\/div>\n      <\/div>\n      \n      <div class='stats'>\n        <div class='stat-box'>\n          <div class='stat-value' id='timer'>30<\/div>\n          <div class='stat-label'>SECONDS LEFT<\/div>\n        <\/div>\n        <div class='stat-box'>\n          <div class='stat-value' id='score'>0<\/div>\n          <div class='stat-label'>TAPS<\/div>\n        <\/div>\n        <div class='stat-box'>\n          <div class='stat-value' id='cps'>0.00<\/div>\n          <div class='stat-label'>CPS<\/div>\n        <\/div>\n      <\/div>\n      \n      <div class='actions'>\n        <button class='action-btn' id='share-btn'>Share Score<\/button>\n        <button class='action-btn' id='reset-btn'>Reset<\/button>\n      <\/div>\n    <\/div>\n    \n    <div class='results'>\n      <p>Select a mode and start tapping to test your clicks per second (CPS)!<\/p>\n      <p>Your best score: <span class='highlight' id='best-score'>0.00 CPS<\/span><\/p>\n    <\/div>\n  <\/div>\n\n  <!-- Popup Modal -->\n  <div class='modal-overlay' id='result-modal'>\n    <div class='modal-content'>\n      <h2 class='modal-title'>Time&#39;s Up!<\/h2>\n      \n      <div class='modal-stats'>\n        <div class='modal-stat'>\n          <div class='modal-stat-value' id='modal-taps'>0<\/div>\n          <div class='modal-stat-label'>TAPS<\/div>\n        <\/div>\n        <div class='modal-stat'>\n          <div class='modal-stat-value' id='modal-cps'>0.00<\/div>\n          <div class='modal-stat-label'>CPS<\/div>\n        <\/div>\n      <\/div>\n      \n      <p class='modal-message' id='modal-message'>Great job! Keep practicing to improve your score.<\/p>\n      \n      <div class='modal-actions'>\n        <button class='modal-btn modal-close' id='modal-close'>Play Again<\/button>\n        <button class='modal-btn modal-share' id='modal-share'>Share Score<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<script>\n    \/\/ Elements\n    const tapArea = document.getElementById(\"tap-area\");\n    const tapText = document.getElementById(\"tap-text\");\n    const countdownEl = document.getElementById(\"countdown\");\n    const timerDisplay = document.getElementById(\"timer\");\n    const scoreDisplay = document.getElementById(\"score\");\n    const cpsDisplay = document.getElementById(\"cps\");\n    const shareBtn = document.getElementById(\"share-btn\");\n    const resetBtn = document.getElementById(\"reset-btn\");\n    const modeButtons = document.querySelectorAll('.mode-btn');\n    const bestScoreEl = document.getElementById('best-score');\n    const modal = document.getElementById(\"result-modal\");\n    const modalTaps = document.getElementById(\"modal-taps\");\n    const modalCps = document.getElementById(\"modal-cps\");\n    const modalMessage = document.getElementById(\"modal-message\");\n    const modalClose = document.getElementById(\"modal-close\");\n    const modalShare = document.getElementById(\"modal-share\");\n\n    \/\/ Game Variables\n    let timeLeft = 30;\n    let totalTime = 30;\n    let taps = 0;\n    let timerId;\n    let gameActive = false;\n    let touchCount = 0;\n    let bestScore = 0;\n\n    \/\/ Set up mode buttons\n    modeButtons.forEach(button => {\n      button.addEventListener('click', () => {\n        \/\/ Remove active class from all buttons\n        modeButtons.forEach(btn => btn.classList.remove('active'));\n        \/\/ Add active class to clicked button\n        button.classList.add('active');\n        \n        \/\/ Update game time\n        totalTime = parseInt(button.dataset.time);\n        timeLeft = totalTime;\n        timerDisplay.textContent = timeLeft;\n        countdownEl.textContent = timeLeft;\n        \n        \/\/ Reset game if it was active\n        if (gameActive) {\n          resetGame();\n        }\n      });\n    });\n\n    \/\/ Event listeners for tap area\n    tapArea.addEventListener('touchstart', (e) => {\n      e.preventDefault();\n      touchCount++;\n      if (touchCount > 1) return;\n      \n      if (!gameActive) {\n        startGame();\n      } else {\n        registerTap();\n      }\n    });\n\n    tapArea.addEventListener('touchend', () => {\n      touchCount = 0;\n    });\n\n    tapArea.addEventListener('click', (e) => {\n      e.preventDefault();\n      if (!gameActive) {\n        startGame();\n      } else {\n        registerTap();\n      }\n    });\n\n    \/\/ Share button event\n    shareBtn.addEventListener('click', shareScore);\n    \n    \/\/ Reset button event\n    resetBtn.addEventListener('click', resetGame);\n    \n    \/\/ Modal buttons\n    modalClose.addEventListener('click', () => {\n      modal.classList.remove('active');\n      resetGame();\n    });\n    \n    modalShare.addEventListener('click', () => {\n      modal.classList.remove('active');\n      shareScore();\n    });\n\n    function registerTap() {\n      if (!gameActive) return;\n      \n      taps++;\n      scoreDisplay.textContent = taps;\n      \n      \/\/ Calculate current CPS\n      const elapsed = totalTime - timeLeft;\n      const currentCPS = elapsed > 0 ? (taps \/ elapsed).toFixed(2) : \"0.00\";\n      cpsDisplay.textContent = currentCPS;\n      \n      \/\/ Visual feedback\n      tapArea.classList.add('pulse');\n      setTimeout(() => tapArea.classList.remove('pulse'), 100);\n    }\n\n    function startGame() {\n      gameActive = true;\n      taps = 0;\n      timeLeft = totalTime;\n      tapText.textContent = \"TAP!\";\n      scoreDisplay.textContent = \"0\";\n      cpsDisplay.textContent = \"0.00\";\n      shareBtn.style.display = \"none\";\n\n      \/\/ Start the countdown timer\n      timerId = setInterval(() => {\n        timeLeft--;\n        timerDisplay.textContent = timeLeft;\n        countdownEl.textContent = timeLeft;\n        \n        \/\/ Add visual effect when time is running out\n        if (timeLeft <= 5) {\n          countdownEl.style.color = \"#e74c3c\";\n          countdownEl.style.opacity = \"0.7\";\n        }\n\n        if (timeLeft <= 0) {\n          clearInterval(timerId);\n          endGame();\n        }\n      }, 1000);\n    }\n\n    function endGame() {\n      gameActive = false;\n      const cps = (taps \/ totalTime).toFixed(2);\n      cpsDisplay.textContent = cps;\n      tapText.textContent = \"Finished!\";\n      \n      \/\/ Update best score\n      if (parseFloat(cps) > bestScore) {\n        bestScore = parseFloat(cps);\n        bestScoreEl.textContent = `${bestScore.toFixed(2)} CPS`;\n      }\n      \n      \/\/ Show result message\n      document.querySelector('.results p').textContent = `Time's up! You tapped ${taps} times in ${totalTime} seconds.`;\n      \n      \/\/ Show share button\n      shareBtn.style.display = \"block\";\n      \n      \/\/ Reset countdown style\n      countdownEl.style.color = \"\";\n      countdownEl.style.opacity = \"0.2\";\n      \n      \/\/ Show modal with results\n      showResultModal(taps, cps);\n    }\n    \n    function showResultModal(taps, cps) {\n      modalTaps.textContent = taps;\n      modalCps.textContent = cps;\n      \n      \/\/ Set different messages based on performance\n      const cpsValue = parseFloat(cps);\n      if (cpsValue >= 8) {\n        modalMessage.textContent = \"Incredible! You're a tapping master!\";\n        createConfetti();\n      } else if (cpsValue >= 6) {\n        modalMessage.textContent = \"Great job! You have excellent tapping speed!\";\n        createConfetti();\n      } else if (cpsValue >= 4) {\n        modalMessage.textContent = \"Good effort! Keep practicing to improve.\";\n      } else {\n        modalMessage.textContent = \"Nice try! Practice makes perfect.\";\n      }\n      \n      modal.classList.add('active');\n    }\n    \n    function createConfetti() {\n      \/\/ Create confetti effect for good scores\n      const colors = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff', '#00ffff'];\n      \n      for (let i = 0; i < 50; i++) {\n        const confetti = document.createElement('div');\n        confetti.className = 'confetti';\n        confetti.style.left = Math.random() * 100 + 'vw';\n        confetti.style.background = colors[Math.floor(Math.random() * colors.length)];\n        confetti.style.animation = `confettiFall ${Math.random() * 3 + 2}s linear forwards`;\n        document.body.appendChild(confetti);\n        \n        \/\/ Remove confetti after animation completes\n        setTimeout(() => {\n          confetti.remove();\n        }, 5000);\n      }\n    }\n    \n    function resetGame() {\n      clearInterval(timerId);\n      gameActive = false;\n      timeLeft = totalTime;\n      taps = 0;\n      timerDisplay.textContent = timeLeft;\n      countdownEl.textContent = timeLeft;\n      scoreDisplay.textContent = \"0\";\n      cpsDisplay.textContent = \"0.00\";\n      tapText.textContent = \"Start Test\";\n      shareBtn.style.display = \"block\";\n      \n      \/\/ Reset countdown style\n      countdownEl.style.color = \"\";\n      countdownEl.style.opacity = \"0.2\";\n      \n      \/\/ Reset message\n      document.querySelector('.results p').textContent = \"Select a mode and start tapping to test your clicks per second (CPS)!\";\n    }\n\n    function shareScore() {\n      const shareText = `I scored ${taps} taps (${cpsDisplay.textContent} CPS) in ${totalTime} seconds on the Tap Speed Test! Can you beat me?`;\n      \n      if (navigator.share) {\n        navigator.share({\n          title: 'My CPS Score',\n          text: shareText\n        });\n      } else {\n        navigator.clipboard.writeText(shareText).then(() => {\n          alert(\"Score copied to clipboard! Share it anywhere.\");\n        });\n      }\n    }\n  <\/script>\n  \n<div class='content'>\n  <h2 class='h2'>CPS test mobile FAQ&#39;s<\/h2>\n  <h3 class='h3'>Is 10 cps in 1 second good?<\/h3>\n  <p>Yes, the average player usually clicks around 5&#8211;7 CPS, so 10 clicks per second is actually considered very good.<\/p>\n  <h3 class='h3'>Is it possible to obtain 50 clicks in 5 seconds on mobile?<\/h3>\n  <p>Yes, it&#8217;s possible but rare on mobile &#8212; you&#8217;d likely need to use two fingers alternately to maintain 10 CPS.<\/p>\n  <h3 class='h3'>Is 100 clicks per 30 seconds on mobile good?<\/h3>\n  <p>100 clicks in 30 seconds is an extremely high number. It&#39;s almost certainly not &quot;good&quot; in the sense of representing intentional, goal-oriented user behavior. It far exceeds what a human is physically capable of doing purposefully.<\/p>\n      <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Tap on your phone and check your score CPS. Repeat the test several times until you get a good result, then share it with your friends and challenge them. 5 Seconds 15 Seconds 30 Seconds 60 Seconds Start Test 30 30 SECONDS LEFT 0 TAPS 0.00 CPS Share Score Reset Select a mode and start [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/pages\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/comments?post=6"}],"version-history":[{"count":2,"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":12,"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/pages\/6\/revisions\/12"}],"wp:attachment":[{"href":"https:\/\/cpstestmobile.com\/index.php\/wp-json\/wp\/v2\/media?parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}