0

I am using class-binding to apply class to a div inside ng-template like this,

<div #mobileTrialSection class="mobile-trial-section hidden-lg hidden-xl" [class.is-touching]="utils.isTouching( mobileTrialSection, null, 100 )">
    <div class="heading">Your trial. Free and easy.</div>
    <ul class="features">
        <li>Full access for 14 days</li>
        <li>No credit card required</li>
    </ul>
</div>

The class I am binding is is-touching,

This method (isTouching) is called like hundereds of times which I don't like because it can cause performance issues, I want to throttle this by 200ms.

The method is as following:

isTouching( dynamicDiv: HTMLElement, referenceDiv: HTMLElement, offset: number = 0, className = 'is-touching', refSelector = null ): boolean {     
  if (!referenceDiv) {                                                                                                                           
    if (refSelector) {                                                                                                                         
        referenceDiv = document.querySelector(refSelector);                                                                                    
    } else {                                                                                                                                   
        referenceDiv = dynamicDiv.parentElement.previousElementSibling as HTMLElement;                                                         
    }                                                                                                                                          
  }                                                                                                                                              
                                                                                                                                               
  if ( !dynamicDiv.classList.contains( className ) ) {                                                                                           
    return ( dynamicDiv?.getBoundingClientRect().top - referenceDiv?.getBoundingClientRect().bottom ) < offset;                                
  }                                                                                                                                              
                                                                                                                                               
  return ( window.innerHeight - dynamicDiv?.offsetTop - dynamicDiv?.offsetHeight ) < offset;                                                     
}                                                                                                                                                  

Besides the logic, is there any other (better) way to bind class so using method so that it does not affect performance.

NOTE: In different scenarios where I want to throttle methods, I use pipes but this case is different and I don't know how to throttle such scenario. Constructive critisim would be appricieated.

3

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.