Advertisement
Guest User

Untitled

a guest
Feb 12th, 2023
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 8.64 KB | Source Code | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3.   <head>
  4.     <title>Article Reading Tracker</title>
  5.   </head>
  6.   <style>
  7.   article {
  8.     width: 50%;
  9.     margin: 0 auto;;
  10.     font-size: 30px;
  11.     line-height: 20px;
  12.     line-height: 1.5;
  13.     padding: 20px;
  14.     color: #333;
  15.     background-color: #f8f8f8;
  16.   }
  17.   #reading-tracker {
  18.     font-size: 14px;
  19.     color: #999;
  20.     text-align: center;
  21.     position: fixed;
  22.     left: 0;
  23.     top: 0;
  24.     background-color: #eee;
  25.     padding: 10px;
  26.     height: auto;
  27.   }
  28. </style>
  29.  
  30.   <body>
  31.     <article>
  32.       Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum elementum rhoncus enim, non sodales sem. Ut facilisis arcu ligula, a iaculis libero tempor sed. Pellentesque vel diam vitae felis posuere semper. Ut placerat dolor non libero dapibus imperdiet. Mauris sed est nec odio vehicula porttitor ut id enim. Nam scelerisque nec enim ac iaculis. Praesent aliquet gravida sapien, sit amet fringilla dui mollis id. Nullam at dignissim nibh, quis sollicitudin mi. Donec purus mauris, blandit nec felis in, sollicitudin venenatis erat. Maecenas bibendum eu diam quis ornare.
  33. <br>
  34.       Curabitur ipsum libero, hendrerit at porttitor id, vulputate blandit est. Quisque pulvinar tempor ultricies. Suspendisse luctus nisi eu sagittis consequat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Ut id est massa. Mauris ante augue, elementum sit amet neque nec, rutrum condimentum quam. Sed vulputate ipsum sed nisl consequat, eu maximus nisi cursus. Pellentesque hendrerit posuere ex, non imperdiet augue. Mauris malesuada, ligula at condimentum sollicitudin, libero ex faucibus purus, vitae dignissim eros diam quis eros. Nunc a imperdiet nisl, quis porttitor lorem.
  35.      
  36.       Suspendisse at augue nisi. Nullam id suscipit turpis. Vivamus efficitur laoreet purus, at efficitur magna vulputate a. Duis luctus posuere sapien id pretium. Maecenas eget lectus eu nibh sodales bibendum. Sed sed massa varius, cursus tellus eu, convallis sapien. Duis quis est augue.
  37.       <br>
  38.       Nam laoreet eros sit amet nisi tincidunt vestibulum. Integer vitae magna non lacus varius eleifend. Quisque maximus lectus nec placerat tincidunt. Mauris at lectus tristique, pretium justo at, tristique dolor. Pellentesque id porta elit. Suspendisse consectetur mi nec massa mollis, eget finibus sapien suscipit. <br>Suspendisse commodo, neque eu feugiat pharetra, nunc justo tristique tortor, a pharetra odio magna bibendum tortor. Nulla at rutrum nulla, et lobortis massa. Donec faucibus at mi at molestie. Quisque sit amet nunc et felis sagittis tempor. Donec et vehicula ipsum, et blandit tellus. Praesent blandit aliquam ligula eu dictum. Pellentesque bibendum mattis eros, at aliquam ex elementum vitae.
  39.       <br>
  40.       Vivamus vitae consectetur erat. Sed auctor commodo mauris, eleifend viverra eros dignissim a. Morbi sodales dapibus risus eu fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus fermentum cursus lacus a tincidunt. Pellentesque a congue purus, ac faucibus sapien. Vivamus placerat tortor turpis, in posuere eros aliquam eu. Proin mi turpis, cursus a risus ac, pharetra tempus arcu. Nam gravida non dolor nec lobortis. Donec nec semper orci. Proin non rutrum nunc, in euismod felis.
  41.      
  42.       Vestibulum eget nibh eleifend, vestibulum leo et, hendrerit lacus. Sed pellentesque ante id tristique malesuada. Aenean posuere turpis in neque facilisis, sit amet imperdiet mauris sollicitudin. Maecenas vel tortor sodales, consequat ipsum at, eleifend est. Pellentesque nec odio a eros interdum tristique ut eget lorem. Mauris gravida diam in erat hendrerit sagittis. Quisque erat velit, varius non tortor at, blandit elementum arcu. Suspendisse scelerisque erat ligula, sed dapibus ipsum auctor in. Fusce eu nunc sit amet felis cursus vulputate faucibus sed ipsum. In iaculis lectus sed euismod convallis. Vivamus tempor ipsum at aliquam consequat.
  43.       <br>
  44.       Etiam mollis tortor tortor, a laoreet eros lobortis ut. Aenean bibendum vel ex in vehicula. Nunc volutpat dignissim tincidunt. Donec a neque bibendum, varius leo ut, dictum enim. Sed vitae neque porttitor, ultrices justo eu, tristique eros. Nullam elementum iaculis enim eget convallis. Integer cursus mi eu urna euismod tincidunt. Maecenas mattis ac dolor id porttitor. Mauris efficitur nisi eget posuere hendrerit. Nam velit nulla, dictum vitae consectetur in, fringilla ut magna. Maecenas eleifend augue eget felis gravida, a dapibus velit euismod.
  45.       <br>
  46.       Praesent egestas non turpis sed rutrum. Pellentesque a turpis quis mi cursus rutrum. Cras sapien massa, tristique a blandit at, interdum sed enim. Sed suscipit, nisl id luctus vestibulum, nisi metus varius urna, eget convallis lectus sapien aliquam quam. Cras risus quam, malesuada sit amet vulputate non, consequat ut magna. Sed et ultrices lacus, a maximus sem. Curabitur volutpat, massa vel scelerisque venenatis, libero elit laoreet est, ac gravida velit massa quis arcu. Nullam finibus lectus purus, non maximus sapien maximus id. Ut egestas viverra magna eu interdum. Vestibulum vel euismod libero, a suscipit lacus. Nunc consequat tortor non justo tempor, ac suscipit mi elementum. Integer quis consectetur sapien. Praesent tempor nisl vel urna volutpat, at vulputate enim facilisis. Phasellus egestas congue leo. Morbi lobortis convallis rhoncus.
  47.       <br>
  48.       Mauris maximus condimentum tortor. Proin dignissim justo in lacus auctor hendrerit. Phasellus condimentum suscipit bibendum. Morbi dictum dui lectus, eget cursus magna volutpat vel. Etiam finibus quis lorem non maximus. Morbi finibus consequat lacus eget tempus. Donec viverra enim quis augue tincidunt, et venenatis tellus luctus. Mauris ullamcorper porta dui, vitae dictum purus luctus suscipit. <br>Quisque eleifend quis ex sit amet mattis. Ut quis magna malesuada, semper diam sit amet, feugiat eros. Ut sed sem tempus, tincidunt ante quis, tempus lacus. Phasellus vehicula nulla sit amet aliquam elementum. Nulla cursus, dui ac consequat fringilla, augue est luctus justo, nec maximus ante nulla nec est.
  49.       <br>
  50.       Phasellus libero purus, ultricies vitae velit vel, varius tincidunt dolor. Quisque viverra bibendum arcu porttitor tempus. Morbi consequat neque ornare luctus pharetra. Sed scelerisque, urna eu tincidunt commodo, eros nisi ultrices justo, vel ultrices sem eros sed ligula. Donec cursus odio eu nulla elementum facilisis. <br>Aliquam ultrices, lorem et mollis dapibus, nunc felis dignissim diam, a viverra ipsum lectus et augue. Quisque semper augue in purus dapibus maximus et non velit. Suspendisse justo massa, laoreet nec vestibulum fringilla, ullamcorper vel dolor. Proin ultricies gravida neque, vel suscipit nulla. Vestibulum efficitur rhoncus volutpat. Etiam volutpat nisi nec felis efficitur, interdum efficitur nisl hendrerit. Nulla porttitor nunc at sollicitudin rhoncus.
  51.     </article>
  52.     <div id="reading-tracker"></div>
  53.     <script>
  54.   let timeSpent = 0;
  55.     let startTime;
  56.  
  57.     // get article content
  58.     const article = document.querySelector("article");
  59.     const articleContent = article.textContent;
  60.  
  61.     // calculate word count
  62.     const wordCount = articleContent.split(" ").length;
  63.  
  64.     // estimate time to read
  65.     const averageReadingSpeed = 200; // words per minute
  66.     const estimatedTime = Math.ceil(wordCount / averageReadingSpeed);
  67.  
  68.     // update reading tracker
  69.     const readingTracker = document.querySelector("#reading-tracker");
  70.     readingTracker.innerHTML = `Estimated time to read: ${estimatedTime} minutes`;
  71.  
  72.     // track reading progress
  73.     let wordsRead = 0;
  74.  
  75.     window.addEventListener("scroll", function () {
  76.       const articleHeight = article.offsetHeight;
  77.       const articlePosition = article.getBoundingClientRect().top;
  78.       const windowHeight = window.innerHeight;
  79.       const percentRead = (windowHeight - articlePosition) / articleHeight;
  80.       wordsRead = Math.ceil(percentRead * wordCount);
  81.  
  82.       // start timer if the article is in view
  83.       if (percentRead > 0 && percentRead < 1 && !startTime) {
  84.        startTime = Date.now();
  85.       }
  86.  
  87.       // stop timer if the article is not in view
  88.       if (percentRead <= 0 || percentRead >= 1) {
  89.         startTime = null;
  90.       }
  91.  
  92.       // calculate time spent
  93.       if (startTime) {
  94.         timeSpent += (Date.now() - startTime) / 1000;
  95.         startTime = Date.now();
  96.       }
  97.  
  98.       let answer = `Words read: ${wordsRead} / ${wordCount} (${Math.floor(percentRead * 100)}%) - Time spent: ${Math.ceil(timeSpent)} seconds - Estimated time to read: ${Math.ceil(estimatedTime * (1 - percentRead))} minutes`;
  99.       readingTracker.innerHTML = answer;
  100.       console.log('Answer = ', answer);
  101.     });
  102.  
  103. </script>
  104.   </body>
  105. </html>
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement