input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

✅css
해당 태그 추가시 input number의 모든 우측 버튼이 사라진다

<input type="number" id="name" onchange='printName()' Placeholder="직접 입력하기">
                        <div class="total">
                            <span>총 </span>
                            <span id="money"> </span>
                            <span> 원</span>
                        </div>

✅html
1) id name인 input 작성 onchange=function명
2) 따라 쓰여질 id money 작성

function printName()  {
    const name = document.getElementById('name').value;
    document.getElementById("money").innerText = name;
}

✅javascript
1) html 선언 함수명으로 함수작성
2) name id를 가진 태그 값을 가져와 name으로 정의
3) money id를 가진 태그에 name으로 정의된것의 값을 텍스트로 밀어넣음

<label id="result"><input type="text"></label>
                        <select onchange="selectbox(this)">
                            <option>naver.com</option>
                            <option>hanmail.net</option>
                            <option>nate.com</option>
                            <option>korea.com</option>
                            <option>gmail.com</option>
                        </select>

✅html
1) id result인 input 또는 span등 빈태그 작성
2) select 박스 onchange=함수명 작성

function selectbox(e) {
    const text = e.options[e.selectedIndex].text;
    // e는 선택목록, 사용자가 선택한 선택목록을 가져온후 index값을 가져온다.
    //해당 인덱스 번호에 맞는 텍스트값을 가져온다    
    document.getElementById('result').innerText = text;
    // 선택한 텍스트를 resultID에 innertext로 집어넣는다
}

✅Javascript
1) html 함수명 함수 작성
2) text = 선택목록을 인덱스로 가져온 후 선택목록의 텍스트 선택
3) 파일의 id result에 text로 선언된 텍스트를 밀어넣는다

<div class="much">
                            <button type="button" class="much-click">10,000</button>
                            <button type="button" class="much-click">30,000</button>
                            <button type="button" class="much-click">100,000</button>
                            <button type="button" class="much-click">150,000</button>
                            <button type="button" class="much-click">200,000</button>
                            <button type="button" class="much-click"><input type="number" id="name"
                                    onchange='printName()' Placeholder="직접 입력하기"></button>
                        </div>
                        <div class="total">
                            <span>총 후원금액 </span>
                            <span id="money"> </span>
                            <span> 원</span>
                        </div>

✅html
1) 여러개 버튼 작성 (텍스트를 추출할 버튼)
2) 텍스트가 나올 빈 span작성 (id money)

    $(".much button").click(function () {
        var t =$(this).text()
        $("#money").text(t);
    });

✅jquery
1) click event 함수 생성 (해당 버튼을 누르면)
2) t 변수는 해당 클릭 (this)의 텍스트임을 선언
3) 텍스트를 넣으려 했던 id money에 텍스트를 넣음

폼이 여러개일때 하나씩 클릭되는 버튼 만들기

<form method="get" class="step1">
                        <h3>후원방식</h3>
                        <div class="how">
                            <button type="button" class="how-click">정기후원</button>
                            <button type="button" class="how-click">일시후원</button>
                        </div>
                        <div class="much">
                            <button type="button" class="much-click">10,000</button>
                            <button type="button" class="much-click">30,000</button>
                            <button type="button" class="much-click">100,000</button>
                            <button type="button" class="much-click">150,000</button>
                            <button type="button" class="much-click">200,000</button>
                            <button type="button" class="much-click"><input type="text" Placeholder="직접 입력하기"></button>
                        </div>
                        </form>

✅html
1) 버튼을 div로 감싸 2개 만들어준다

    $('button').click(function () {
        $(this).addClass('click');
    });

✅jquery
1) 클릭시 addClass로 색상이 바뀌게 제작
➡️ 다른 button클릭시 사라지지 않고 다시눌러도 사라지지않는다. addClass가 남아있음

    $(document).on("click", "button", function () {
        button = $('button'); 
        button.toggle(
            function(){button.addClass('click')},
            function(){button.removeClass('click')}
          );
      });


✅jquery
1) 토들 버튼으로 class추가 삭제
➡️ toggle이기 때문에 아예 레이어가 사라짐


    $('button').each(function (index) {
        $(this).attr('button-index', index);
    }).click(function () {
        var index = $(this).attr('button-index');
        $('button[button-index=' + index + ']').addClass('click');
        $('button[button-index!=' + index + ']').removeClass('click');
    });


✅jquery
1) 버튼을 index로 받아서 인덱스 클릭시 하나만 나타나게 제작
➡️ index를 전체에 주어서 밑에 폼으로 내려갔을때 상단에 클릭효과가 적용되지 않음

    $(document).on("click", "div>button", function () {
        $(this).removeClass('click');
        $(this).addClass('click');
    });


✅jquery
1) addClass전에 removeClass를 추가하여 기존 클릭 이벤트를 삭제
➡️ remove가 전체로 되어 위와 같이 내려갔을때 상단 클릭효과가 적용되지않음

$(document).on("click", "div>button", function () {
        $(this).addClass('click').siblings().removeClass('click');
    });

//siblings로 해결 siblings:선택한 요소의 형제(sibling) 요소 중에서 지정한 선택자에 해당하는 요소를 모두 선택한다.

✅jquery /최종해결
1) addClass에 sblings이용 하여 해결
➡️ siblings:선택한 요소의 형제(sibling) 요소 중에서 지정한 선택자에 해당하는 요소를 모두 선택한다.
따라서 div별로 묶였을때만 적용

✔️ siblings개념 이해


✅Adobe Illustration
1) Window > Asset Export 창을 열어준다
2) 대지내 레이어들을 원하는 만큼 그룹하여 끌어다놓는다
3) png svg등 원하는 파일로 저장해준다

header.active{
    background: #40305fad;
}

✅css
header에 activ 클래스가 추가되었을때 bakcground 색상을 다르게 설정

$(window).on('scroll',function(){
    if($(window).scrollTop()){
        $('header').addClass('active');
    }else{
        $('header').removeClass('active');
    }
});

✅jquery
1) 스크롤 함수
2) if scroll Top에서 움직이면 header에 active 클래스 추가
3) else active클래스 삭제

✔ addClass와 removeClass 다양하게 활용가능

<header>
            <a href="#" class="logo">로고</a>
            <div class="nav">
                <a href="#">메뉴1</a>
                <a href="#">메뉴2</a>
                <a href="#">메뉴3</a>
                <a href="#">메뉴4</a>
                <a href="#">메뉴5</a>
            </div>
</header>
    <div class="subNav">
        <div>
            <a href="#">서브메뉴1</a>
            <div class="subMenu">
                <a href="#">서브1-1</a>
                <a href="#">서브1-2</a>
                <a href="#">서브1-3</a>
                <a href="#">서브1-4</a>
            </div>
            <a href="#">서브2</a>
            <div class="subMenu">
                <a href="#">서브2-1</a>
                <a href="#">서브2-2</a>
                <a href="#">서브2-3</a>
                <a href="#">서브2-4</a>
            </div>
            <a href="#">서브3</a>
            <div class="subMenu">
                <a href="#">서브3-1</a>
                <a href="#">서브3-2</a>
                <a href="#">서브3-3</a>
            </div>
    </div>

✅html
1) header에 로고와 메뉴를 작성
2) header밖에 subnav 메뉴를 작성

header{
    height: 80px;
    border-bottom: 1px solid rgba(0, 0, 0, 0.05);
    width: 1200px;
    margin: 0 auto;
}
header .logo{
    display: block;
    background: url(../img/logo.png) no-repeat;
    background-size: contain;
    width: 150px;
    height: 65px;
    text-indent: -9999px;
    overflow: hidden;
}
header .nav{
    display: flex;
}
.subNav>div{
    display: flex;
    flex-direction: column;
    width: 150px;
}
.subNav div .subMenu{
    display: flex;
    flex-direction: column;
}
.subNav{
    height: 0;
    overflow-y: hidden;
    background: #f8f8f8ec;
    position: absolute;
    top: 80px;
    z-index: 10;
    display: flex;
    justify-content: center;
    width: 100%;
}
.subNav.on{
    display: flex;
    box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1);
    transition: all 0.5s;
    height: 560px;
}

✅css
1) header, 로고, 메뉴 스타일을 지정
2) subNav 에 overflow-y : hidden으로 설정하고 height를 0으로 하여 숨겨준다
3) subNav에 on클래스가 추가된 스타일을 지정한다
- box-shadow로 뒷배경과 구분되게한다
- transition으로 부드럽게 하단으로 내려가게한다
- height값을 줘서 overflow hidden된 것을 보이게 한다

$( document ).ready( function() {
$(".nav").mouseenter(function () {
    $('.subNav').addClass("on");
});
$(".subNav").mouseleave(function () {
    $('.subNav').removeClass("on");
});
});

✅jquery
1) nav에 마우스가 들어오면 subNav에 on 클래스가 추가 된다
2) subNav에서 마우스가 벗어나면 subNav에 on클래스가 사라지고 기존 클래스 속성으로 돌아온다

flex를 사용했을때는 slideDown과 slideUp을 쓰면 display block으로 들어오기 때문에 레이아웃이 망가진다
mouse leave를 하단 메뉴가 아닌 상단 메뉴로 했을 경우 메뉴를 클릭하러 가면 메뉴가 사라져 사용성에 좋지 않다

$('p').hide();
$('#btN1').click(function () {
var Time = 900;
        $('.text1').fadeIn(
            Time,
            function () {
                $('.text2').fadeIn(
                    Time,
                    function () {
                        $('.text3').fadeIn(
                            Time,
                            function () {
                                $('.text4').fadeIn(
                                    Time,
                                    function () {
                                        $('.text5').fadeIn(Time);
                                    });
                            });
                    });
            });
        return false;
    });

✅jquery
1) 모든 p(text)를 숨겨준다
2) 버튼 클릭시 text가 1-5순으로 나타나게 하기 위해 애니메이션 작동 시간을 설정한다
3) text1부터 fadeIn 함수를 작성해서 함수안에 함수로 작성한다(차례로 나오게 하기위해)
4) return false로 함수를 빠져나올 수 있게한다

✔ 차례로 하기 위한 함수는 함수안에 함수 밖에 작성할수 없을까??

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 330 524.26" class="n_course1">
            <g>
                <g id="n1">
                    <line id="n1-1" class="cls-0" x1="2.5" y1="381.5" x2="239.58" y2="521.76" />
                    <line id="n1-2" class="cls-0" x1="191.09" y1="264.05" x2="2.5" y2="381.5" />
                    <line id="n1-3" class="cls-0" x1="134.04" y1="229.59" x2="190.5" y2="263.5" />
                    <line id="n1-4" class="cls-0" x1="134.5" y1="229.5" x2="327.5" y2="113.5" />
                    <line id="n1-5" class="cls-0" x1="148.5" y1="2.5" x2="327.5" y2="113.5" />
                </g>
            </g>
        </svg>

✅html
1) 원하는 코스 일러스트 svg변환하여 가져오기 ( 한줄이 아닌 여러줄로 가져온다)
2) 각 line에 id명을 다르게 부여

.cls-0 {
    fill: none;
    stroke: #ffce46;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 14px;
}
@keyframes Cn1 {
   from {stroke-dashoffset : -500px;}
   to {stroke-dashoffset : 0px;}
}
@keyframes Cn1-1 {
    from {stroke-dashoffset : 500px;}
    to {stroke-dashoffset : 0px;}
#n1-1{stroke-dasharray: 500; stroke-dashoffset: -500;animation: 1s linear 0s forwards;}
#n1-2{stroke-dasharray: 500; stroke-dashoffset: -500;animation: 1.8s linear 0s forwards;}
#n1-3{stroke-dasharray: 500; stroke-dashoffset: -500;animation: 2s linear 0s forwards;}
#n1-4{stroke-dasharray: 500; stroke-dashoffset: -500;animation: 2s linear 2s forwards;}
#n1-5{stroke-dasharray: 500; stroke-dashoffset: -500;animation: 2s linear 1.8s forwards;}

 }

✅css
1) svg에 있던 style을 css로 빼준다
2) keyframe 명과 keyframe애니메이션을 작성한다
3) 각 길에 animation시간을 다르게하여 자연스럽게 이어지게 한다
4) jquery를 연결하기 전 animation에 keyframe명을 넣어 미리 확인

$('#btN1').click(function () {
        $('.n_course1').css('display', 'block');
        $('#n1-1,#n1-2,#n1-3,#n1-5').css('animation-name', 'Cn1');
        $('#n1-4').css('animation-name', 'Cn1-1');
        $('.n_course2,.s_course1,.s_course2,.s_course3').css('display', 'none');
        
    });

✅jquery
1) 버튼 클릭 이벤트 함수
2) 원하는 코스 display block이 되고
3) 각 코스 명에 원하는 keyframe css설정을 넣어준다
4) 다른 코스가 동시에 뜨는것을 방지하기 위해 해당 코스를 제외하고 display none 해준다

✔ 코스가 많으면 코드가 길어진다 다른 방법이 있을지 생각해볼 필요가있다..

+ Recent posts