jineecode

.active가 있는 자료를 auto scroll 주기 본문

JS/jquery

.active가 있는 자료를 auto scroll 주기

지니코딩 2021. 10. 28. 10:16

overflow-x: auto; 를 갖고 있는 div가 있고, 그 안에 여러 가지 이미지가 들어있다. 즉, 가로로 스크롤 되는 기능.

그리고 이미지 중 active를 갖고 있는 이미지는 border가 적용된다.

페이지에 진입할 때, active 클래스를 갖고 있는 자료가 화면 가운데에 보이도록 하는 기능을 넣기로 했다.

            <div class="growthHorizontalWrapper">
              <div class="growthWrapper">
                <img
                  src="./images/image(n).svg"
                  alt="이미지"
                />
              </div>
              <div class="growthWrapper">
                <img
                  src="./images/image(n).svg"
                  alt="이미지"
                />
              </div>
              <div class="growthWrapper">
                <img
                  src="./images/image(n).svg"
                  alt="이미지"
                />
              </div>
              <div class="growthWrapper">
                <img
                  src="./images/image(n).svg"
                  alt="이미지"
                />
              </div>
              <div class="growthWrapper">
                <img
                  src="./images/image(n).svg"
                  alt="이미지"
                />
              </div>
              <div class="growthWrapper">
                <img
                  src="./images/image(n).svg"
                  alt="이미지"
                />
            </div>
.growthHorizontalWrapper {
  display: flex;
  width: 100%;
  overflow-x: auto;
}

.growthWrapper {
  width: 113px;
  height: 185px;
  background-color: #fff;
  border-radius: 2px;
  box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25);
  display: flex;
  flex-direction: column;
  margin: 8px 23px 16px 0;
  padding: 20px 16px;
  text-align: center;
  justify-content: end;
  align-items: center;
}

.growthWrapper.active {
  border: solid 1px #005500;
}
ajax (
type,
url,
data,
success {
...
	$(".growthHorizontalWrapper").scrollCenter(".active", 300);
...
	}
)

jQuery.fn.scrollCenter = function (elem, speed) {
  // this = .growthHorizontalWrapper
  // elem = .active

  var active = this.find(elem); 
  // .active를 갖고 있는 요소를 찾아 active에 할당
  
  var activeWidth = active.width() / 2; 
  // 그 요소의 가운데 지점을 activeWidth에 할당

  var pos = active.position().left + activeWidth; 
  //그 요소의 왼쪽으로부터 요소의 가운데지점까지를 pos 에 할당
  
  var currentscroll = this.scrollLeft(); 
  // 현재의 왼쪽 포지션을 currentscroll에 할당
  
  var divwidth = this.width(); 
  //그 요소의 width를 divwidth에 할당
  
  pos = pos + currentscroll - divwidth / 2; 

  this.animate(
    {
      scrollLeft: pos,
    },
    speed == undefined ? 1000 : speed
  );
  // pos의 위치로 scrollLeft 해줌
  
  return this;
};

 

'JS > jquery' 카테고리의 다른 글

jquery 한번에 다수의 css 속성 변경하기  (0) 2021.07.08
filereader event  (0) 2021.01.04
animate  (0) 2020.12.14
event  (0) 2020.12.14
attr method  (0) 2020.12.14
Comments