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