Drow line when user scroll

20 Views Asked by At

I have to animate lines like those shared in the screenshot and I have tried the below code but it's not working for me. I am getting an error in my ID. Would you help me out

enter image description here

 window.addEventListener("DOMContentLoaded",()=>{
function createSVGLine(classN, lineW, lineH){
  let svgns = 'http://www.w3.org/2000/svg';
  let svgElement = document.createElementNS(svgns, 'svg');
  svgElement.classList.add(classN);
  let svgLine = document.createElementNS(svgns, 'line');
  svgLine.setAttribute('x1', '0');
  svgLine.setAttribute('y1', '0');
  svgLine.setAttribute('x2', lineW);
  svgLine.setAttribute('y2', lineH);
  svgElement.appendChild(svgLine);
  return svgElement;
};

  let getLine = document.querySelector('.assessWrap > .eline');
  
  document.querySelectorAll('.assessWrap').forEach((addSvg)=>{
    addSvg.append(createSVGLine("hline", getLine.getBoundingClientRect().width, 0));
    addSvg.append(createSVGLine("vline", 0, getLine.getBoundingClientRect().height));
  });
});
  
window.addEventListener('scroll', function() {
  let scrollTop = window.scrollY;
  let svgWidth = document.querySelector('svg').getBoundingClientRect().width;
  let line = document.getElementById('line');
  let progress = (scrollTop / (document.body.scrollHeight - window.innerHeight)) * svgWidth;
  if (progress <= svgWidth) {
    //line.setAttribute('x2
      line.setAttribute('x2', progress);
  }
});

window.addEventListener('scroll', function() {
  let scrollTop = window.scrollY;
  let svgHeight = document.getElementById('svg').getBoundingClientRect().height;

  let line = document.getElementById('line');
  let progress = (scrollTop / (document.body.scrollHeight - window.innerHeight)) * svgHeight;
  if (progress <= svgHeight) {
    line.setAttribute('y2', progress);
  }
});
 body {
    margin: 0;
    font-family: Arial, sans-serif;
  }
  #content{height:1000px}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<div id="content"></div>
<div class="contentWrap container">
    
    <section class="assessWrap">

        <div class="eline">
    <div class="row">
        <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
      <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
      <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
    </div>
    </div>
    </section>
     <section class="assessWrap">
    
        <div class="eline">
     <div class="row">
       <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
       <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
       <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
    </div>
     </div>
    </section>
    <section class="assessWrap">
        <div class="eline">
     <div class="row">
        <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
        <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
        <div class="col-lg-4"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce at dui nec lacus interdum euismod in eget ligula. Donec leo dui, viverra quis purus vel, bibendum ultricies ligula. Cras a vulputate risus. Curabitur ac mi volutpat, consectetur nibh nec,</p></div>
    </div>
     </div>
    </section>
    
</div>

0

There are 0 best solutions below