2A News

Licensed and Armed Seattle Driver Shoots Two Alleged Carjackers

Reading Time: 1:58 min

Four alleged carjackers in Washington state chose 3:30 a.m. to target their prey, and they likely assumed that it would be easy pickings. They were wrong. The driver was not…

View post

Judge: Savannah’s Prohibition of Guns in Unlocked Vehicles ‘Unenforceable’

Reading Time: 1:56 min

Savannah, Georgia, is a coastal tourist destination that also grapples with more than its fair share of violent crime. Sadly, city officials continue to pursue failed gun control policies that…

View post

St. Paul Mayor Admits New ‘Assault Weapons’ Ban Cannot be Enforced

Reading Time: 3:31 min

Political posturing is as old as politics itself, but modern-day anti-gunners are busy making it into an art form. Despite the utter futility of toothless restrictions on Second Amendment rights,…

View post

Armed Good Samaritan Holds Suspect For Police After Horrific Attack

Reading Time: 1:49 min

It is still possible, even in 2025, to be stunned by the utter cruelty that people can inflict on one another.  An armed Good Samaritan in Tennessee was unable to…

View post

California Man Stops Home Invasion With .22 Rifle

Reading Time: 1:52 min

It’s not every day that a home invasion is carried out with a wooden pole as the weapon of choice, but that’s what unfolded early Thursday morning at a Mount…

View post

California Man Stops Home Invasion With .22 Rifle

Reading Time: 1:52 min

It’s not every day that a home invasion is carried out with a wooden pole as the weapon of choice, but that’s what unfolded early Thursday morning at a Mount…

View post
<script>
  /*Source: https://github.com/Krzysztof-Antosik/Two-direction-Sticky-Sidebar*/
  
  // Verificar el ancho de pantalla al cargar y redimensionar
  function checkScreenWidth() {
    if (window.innerWidth <= 767) {
      // Si la pantalla es menor o igual a 676px, no ejecutar el código
      return;
    }

    const stickyElement = document.querySelector('.fb-sidebar__aside');
    const startPosition = stickyElement.getBoundingClientRect().top;

    let endScroll = window.innerHeight - stickyElement.offsetHeight - 500;
    let currPos = window.scrollY;
    let screenHeight = window.innerHeight;
    let stickyElementHeight = stickyElement.offsetHeight;
    let topGap = 40;
    let bottomGap = 40;

    setTimeout(() => {
      if (stickyElement.hasAttribute('data-top-gap')) {
        const dataTopGap = stickyElement.getAttribute('data-top-gap');
        topGap = dataTopGap === 'auto' ? startPosition : parseInt(dataTopGap);
      }

      if (stickyElement.hasAttribute('data-bottom-gap')) {
        bottomGap = parseInt(stickyElement.getAttribute('data-bottom-gap'));
      }
    }, 100);

    stickyElement.style.position = 'sticky';
    stickyElement.style.top = `${topGap}px`;
    stickyElement.style.height = 'fit-content';

    function positionStickySidebar() {
      endScroll = window.innerHeight - stickyElement.offsetHeight - bottomGap;
      const stickyElementTop = parseInt(stickyElement.style.top.replace('px', ''));

      if (stickyElementHeight + topGap + bottomGap > screenHeight) {
        if (window.scrollY < currPos) {
          if (stickyElementTop < topGap) {
            stickyElement.style.top = `${stickyElementTop + currPos - window.scrollY}px`;
          } else if (stickyElementTop >= topGap && stickyElementTop !== topGap) {
            stickyElement.style.top = `${topGap}px`;
          }
        } else {
          if (stickyElementTop > endScroll) {
            stickyElement.style.top = `${stickyElementTop + currPos - window.scrollY}px`;
          } else if (stickyElementTop < endScroll && stickyElementTop !== endScroll) {
            stickyElement.style.top = `${endScroll}px`;
          }
        }
      } else {
        stickyElement.style.top = `${topGap}px`;
      }
      currPos = window.scrollY;
    }

    function stickyElementToMe() {
      stickyElement.style.top = `${topGap}px`;
    }

    function updateSticky() {
      screenHeight = window.innerHeight;
      stickyElementHeight = stickyElement.offsetHeight;
      positionStickySidebar();
    }

    setTimeout(() => {
      window.addEventListener('resize', () => {
        currPos = window.scrollY;
        updateSticky();
      });

      document.addEventListener('scroll', updateSticky, {
        capture: true,
        passive: true
      });
    }, 1000);
  }

  // Verificar el ancho de pantalla al cargar y redimensionar
  window.addEventListener('load', checkScreenWidth);
  window.addEventListener('resize', checkScreenWidth);
</script>