79384846

Date: 2025-01-24 15:40:30
Score: 1.5
Natty:
Report link

document.addEventListener('DOMContentLoaded', function() {
  const cardWrapper = document.querySelector('.card-wrapper');
  const btnScrollUp = document.getElementById('btn-scroll-up');
  const btnScrollDown = document.getElementById('btn-scroll-down');

  let scrollAmount = window.innerWidth < 768 ? 50 : 100; // Adjust scroll amount based on screen size

  function scrollVertically(direction) {
    // Scroll up
    if (direction === 1) {
      cardWrapper.scrollBy({
        top: -scrollAmount,
        behavior: 'smooth'
      });
    }
    // Scroll down
    else {
      cardWrapper.scrollBy({
        top: scrollAmount,
        behavior: 'smooth'
      });
    }

    // Update button visibility after scrolling
    setTimeout(updateScrollButtons, 300); // Delay to allow for smooth scrolling
  }

  function updateScrollButtons() {
    const currentScrollPosition = cardWrapper.scrollTop;
    const maxScrollHeight = cardWrapper.scrollHeight - cardWrapper.clientHeight;

    // Hide or show the up button
    btnScrollUp.style.display = currentScrollPosition <= 0 ? 'none' : 'flex';

    // Hide or show the down button
    btnScrollDown.style.display = currentScrollPosition >= maxScrollHeight ? 'none' : 'flex';
  }

  // Initialize scroll button visibility
  updateScrollButtons();

  // Create a wrapper function for scrolling up
  function scrollUp() {
    scrollVertically(1);
  }

  // Create a wrapper function for scrolling down
  function scrollDown() {
    scrollVertically(-1);
  }

  // Add event listeners for buttons
  btnScrollUp.addEventListener('click', scrollUp);
  btnScrollUp.addEventListener('touchstart', scrollUp);
  btnScrollDown.addEventListener('click', scrollDown);
  btnScrollDown.addEventListener('touchstart', scrollDown);

  // Add scroll event listener to update button visibility when scrolling manually
  cardWrapper.addEventListener('scroll', updateScrollButtons);

  // Add event listeners for "View More" buttons
  const viewMoreButtons = document.querySelectorAll('.view-more-btn');
  viewMoreButtons.forEach(button => {
    button.addEventListener('click', function() {
      const cardDetails = this.parentElement.querySelector('.card-text');
      cardDetails.classList.toggle('expanded'); // Toggle the expanded class

      // Scroll to the bottom of the card wrapper if expanding the last card
      if (this.closest('.card') === cardWrapper.lastElementChild) {
        cardWrapper.scrollTo({
          top: cardWrapper.scrollHeight, // Scroll to the bottom of the card wrapper
          behavior: 'smooth' // Smooth scroll
        });
      }

      this.textContent = cardDetails.classList.contains('expanded') ? 'View Less' : 'View More'; // Change button text

      // Update scroll button visibility
      updateScrollButtons();
    });
  });

  // Add touch and click event listeners to the window for scrolling
  ['touchstart', 'click'].forEach(function(e) {
    window.addEventListener(e, function(event) {
      if (event.target === btnScrollUp) {
        scrollUp();
      } else if (event.target === btnScrollDown) {
        scrollDown();
      }
    });
  });
});
:root {
    --primary-color: #00605f;
        --secondary-color: #017479;
        --text-dark: #0f172a;
    --white: #ffffff;
    }
    .testimonial-container-right {
      grid-area: testimonial-container-right;
      display: flex;
      flex-direction: column;
    }

    .vertical-scroll {
      display: flex;
      align-items: center;
      justify-content: center;
      position: relative;
      /* Change to relative for positioning */
    }

    .btn-scroll {
      font-size: 2rem;
      outline: none;
      border: none;
      color: var(--white);
      cursor: pointer;
      background: var(--primary-color);
      transition: .3s all ease;
    }

    #btn-scroll-up,
    #btn-scroll-down {
      position: absolute;
      left: 50%;
      transform: translateX(-50%);
      display: flex;
      /* Ensure it's displayed as a flex container */
      z-index: 1;
      padding: .5rem 1rem;
    }

    #btn-scroll-up {
      border-radius: 0 0 1rem 1rem;
      top: 0;
    }

    #btn-scroll-down {
      border-radius: 1rem 1rem 0 0;
      bottom: 0;
    }

    .btn-scroll:hover,
    .btn-scroll:focus {
      background-color: var(--secondary-color);
    }

    .card-wrapper {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: flex-start;
      gap: 1rem;
      height: 650px;
      overflow-y: hidden;
      position: relative;
    }

    .card {
      padding: 2rem;
      display: flex;
      flex-direction: row;
      align-items: flex-start;
      gap: 1rem;
      background-color: var(--white);
      border-radius: 1rem;
      cursor: pointer;
      max-height: auto;
      border: 1px solid var(--secondary-color);
      -webkit-user-select: none;
      /* Safari */
      -ms-user-select: none;
      /* IE 10 and IE 11 */
      user-select: none;
      /* Standard syntax */
      max-width: 650px;
      /*word-break: break-all;*/
    }

    .testi-image {
      display: flex;
      align-items: center;
      justify-content: center;
    }

    .card img {
      width: 75px;
      /* Set a max width for the preview */
      height: 75px;
      /* Set a max height for the preview */
      border-radius: 50%;
      border: 1px solid #eee;
      float: none;
      pointer-events: none;
    }

    .card__content {
      display: flex;
      gap: 1rem;
      flex: 1;
      max-width: 100%;
    }

    .card__content span i {
      font-size: 2rem;
      color: var(--primary-color);
    }

    .card__details {
      flex-grow: 1;
      /* Allow it to grow */
      flex-shrink: 1;
      /* Allow it to shrink */
      min-width: 0;
      /* Avoid forcing unnecessary width */
      max-width: 100%;
      /* Prevent overflow beyond container */
      overflow: hidden;
    }

    .card__details p {
      max-width: 100%;
      font-size: 1rem;
      font-style: italic;
      font-weight: 400;
      color: var(--text-dark);
      margin-right: 1rem;
      margin-bottom: 1rem;
      overflow: hidden;
      display: -webkit-box;
      -webkit-line-clamp: 3;
      /* Limit to 3 lines */
      -webkit-box-orient: vertical;
      transition: max-height 0.3s ease;
      max-height: 4.5em;
      /* Adjust based on line height */

    }

    .card__details p.expanded {
      -webkit-line-clamp: unset;
      /* Remove line limit */
      max-height: none;
      /* Allow full height */
    }

    .card__details h4 {
      text-align: right;
      color: var(--primary-color);
      font-size: 1rem;
      font-weight: 500;
    }

    .card__details h5 {
      text-align: right;
      color: var(--primary-color);
      font-size: .8rem;
      font-weight: 400;
      margin-bottom: .1rem;
    }

    .card__details h6 {
      text-align: right;
      color: var(--text-light);
      font-size: .7rem;
      font-weight: 400;
      display: flex;
      /* Use flexbox for better alignment */
      align-items: center;
      /* Center align items vertically */
      justify-content: flex-end;
      /* Align content to the right */
      margin-top: 0;
      margin-bottom: 0;
    }

    .rating-stars_in_card {
      height: 30px;
      position: absolute;
      vertical-align: baseline;
      color: #b9b9b9;
      line-height: 10px;
      float: left;
      margin: 1rem 0;
    }

    .card__details button {
      padding: .5rem 1rem;
      outline: none;
      border: none;
      border-radius: 5px;
      background: linear-gradient(to right, #ff226f,
          #fe6769);
      color: var(--white);
      font-size: .8rem;
      cursor: pointer;
    }

    @media(max-width:768px){
    .testimonial-container-right{
            margin: 1rem 0 1rem 0;
        }
        .card-wrapper{
            height: 500px;
        }
        .btn-scroll{
            font-size: 1rem;
        }
        #btn-scroll-up,
        #btn-scroll-down {
            padding: .25rem .5rem;
        }
        .card{
            display:flex;
            flex-direction: column; /* Stack elements vertically */
            align-items: center; /* Center items horizontally */
            gap:0;
            width: 300px;
        }
        .card img{
            width: 60px;
            height: 60px;
            margin-bottom: 1rem; /* Add some space below the image */
            order: -1; /* Ensure the image appears first */
        }
        .rating-stars_in_card {
            margin-top: 0.5rem; /* Add some spacing below the image */
        }
        .card__content{
            display: flex;
            gap:1rem;
        }
        .card__content span i{
            font-size: 1.5rem;
        }
        .card__details p{
            font-size: .8rem;
            margin-bottom: 0.5rem;
        }
        .card__details h4{
            font-size: .8rem;
            margin-top: 1.5rem;
        }
        .card__details h5{
            font-size: .7rem;
            margin-bottom: .1rem;
        }
        .card__details h6{
            font-size: .6rem;
        }
        .card__details button{
            padding: .25rem .5rem;
            font-size: .6rem;
        }
    }
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/all.min.css" integrity="sha512-q3eWabyZPc1XTCmF+8/LuE1ozpg5xxn7iO89yfSOd5/oKvyqLngoNGsx8jq92Y8eXJ/IRxQbEC+FGSYxtk2oiw==" crossorigin="anonymous" referrerpolicy="no-referrer" />

        <div class="testimonial-container-right">
          <div class="vertical-scroll">
            <button class="btn-scroll" id="btn-scroll-up">
                <i class="fas fa-chevron-up"></i>
            </button>
          </div>
          <div class="card-wrapper">
            <div class="card">
              <div class="testi-image">
                <img src="https://cdn-icons-png.flaticon.com/512/219/219969.png" alt="client-photo">
              </div>
              <div class="card__content">
                <span><i class="fas fa-quote-left"></i></span>
                <div class="card__details">
                  <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in lacinia nisl, ac dapibus magna. Morbi malesuada orci vitae turpis egestas, sit amet pellentesque massa auctor. Etiam id bibendum tellus. Duis accumsan in metus a rutrum. Nam ac rutrum sem, non aliquet neque. Aliquam vulputate interdum finibus. Vestibulum eu efficitur ligula. Nunc felis turpis, tincidunt gravida commodo a, maximus et dui. In fringilla ante vitae tortor venenatis, ac luctus urna faucibus. </p>
                  <button class="view-more-btn">View More</button><br>
                  <div class="rating-stars_in_card">
                    <div class="grey-stars"></div>
                    <div class="filled-stars" style="width:60%"></div>
                  </div>
                  <h4>~ techieafrohead</h4>
                  <h5>India(Amity)</h5>
                  <h6>Service</h6>
                </div>
              </div>
            </div> 
            <div class="card">
              <div class="testi-image">
                <img src="https://cdn-icons-png.flaticon.com/512/219/219969.png" alt="client-photo">
              </div>
              <div class="card__content">
                <span><i class="fas fa-quote-left"></i></span>
                <div class="card__details">
                  <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in lacinia nisl, ac dapibus magna. Morbi malesuada orci vitae turpis egestas, sit amet pellentesque massa auctor. Etiam id bibendum tellus. Duis accumsan in metus a rutrum. Nam ac rutrum sem, non aliquet neque. Aliquam vulputate interdum finibus. Vestibulum eu efficitur ligula. Nunc felis turpis, tincidunt gravida commodo a, maximus et dui. In fringilla ante vitae tortor venenatis, ac luctus urna faucibus. </p>
                  <button class="view-more-btn">View More</button><br>
                  <div class="rating-stars_in_card">
                    <div class="grey-stars"></div>
                    <div class="filled-stars" style="width:60%"></div>
                  </div>
                  <h4>~ techieafrohead</h4>
                  <h5>India(Amity)</h5>
                  <h6>Service</h6>
                </div>
              </div>
            </div> 
            <div class="card">
              <div class="testi-image">
                <img src="https://cdn-icons-png.flaticon.com/512/219/219969.png" alt="client-photo">
              </div>
              <div class="card__content">
                <span><i class="fas fa-quote-left"></i></span>
                <div class="card__details">
                  <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in lacinia nisl, ac dapibus magna. Morbi malesuada orci vitae turpis egestas, sit amet pellentesque massa auctor. Etiam id bibendum tellus. Duis accumsan in metus a rutrum. Nam ac rutrum sem, non aliquet neque. Aliquam vulputate interdum finibus. Vestibulum eu efficitur ligula. Nunc felis turpis, tincidunt gravida commodo a, maximus et dui. In fringilla ante vitae tortor venenatis, ac luctus urna faucibus. </p>
                  <button class="view-more-btn">View More</button><br>
                  <div class="rating-stars_in_card">
                    <div class="grey-stars"></div>
                    <div class="filled-stars" style="width:60%"></div>
                  </div>
                  <h4>~ techieafrohead</h4>
                  <h5>India(Amity)</h5>
                  <h6>Service</h6>
                </div>
              </div>
            </div> 
            <div class="card">
              <div class="testi-image">
                <img src="https://cdn-icons-png.flaticon.com/512/219/219969.png" alt="client-photo">
              </div>
              <div class="card__content">
                <span><i class="fas fa-quote-left"></i></span>
                <div class="card__details">
                  <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in lacinia nisl, ac dapibus magna. Morbi malesuada orci vitae turpis egestas, sit amet pellentesque massa auctor. Etiam id bibendum tellus. Duis accumsan in metus a rutrum. Nam ac rutrum sem, non aliquet neque. Aliquam vulputate interdum finibus. Vestibulum eu efficitur ligula. Nunc felis turpis, tincidunt gravida commodo a, maximus et dui. In fringilla ante vitae tortor venenatis, ac luctus urna faucibus. </p>
                  <button class="view-more-btn">View More</button><br>
                  <div class="rating-stars_in_card">
                    <div class="grey-stars"></div>
                    <div class="filled-stars" style="width:60%"></div>
                  </div>
                  <h4>~ techieafrohead</h4>
                  <h5>India(Amity)</h5>
                  <h6>Service</h6>
                </div>
              </div>
            </div> 
          </div><!--card-wrapper-->
          <div class="vertical-scroll">
            <button class="btn-scroll" id="btn-scroll-down">
              <i class="fas fa-chevron-down"></i>
            </button>
          </div>
        </div><!--testimonial-container-right-->

it finally worked.

thanks to @Mark Schultheiss

Reasons:
  • Blacklisted phrase (0.5): thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @Mark
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: techie_afrohead