묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결그로스해킹 - 데이터와 실험을 통해 성장하는 서비스를 만드는 방법
[2-2-2] Acquisition 2 - 모바일앱 Attribution (19:40 ~) 강의 관련 질문 드립니다.
안녕하세요:) [2-2-2] Acquisition 2 - 모바일앱 Attribution (19:40 ~) 강의 관련 질문 드립니다. 스크린샷 하단 예시에서, 동일한 상품을 각기 다른 채널 A,B에 판매한다고 생각했습니다. 같은 상품인데, 왜 원가와 이익이 다른지 궁금합니다. 제가 잘못 이해했다면, 원가가 3000만원인 제품'ㄱ '을 채널A에서 광고집행하고, 원가가 1000만원인 제품'ㄴ'을 채널B에서 광고집행한 것으로 예시를 든건가요? 만약 제품이 다르다면, 다른 제품에 대해서 채널 A,B 성과를 비교하는 것 자체가 잘못된건 아닌가 하는 생각이 들었습니다. 답변달아주실 분께 미리 감사드립니다:)
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
에러뜨는데 설명좀 해주시면 감사하겠습니다
선생님 코드랑 똑같이 쳤는데 변수 선언 부분에서 오류가 납니다. is_adult = age >= 3 이렇게 하면 에러가 납니다. age와 3 둘다 정수형이니까 맞는 문법 아닌가요? 왜 에러가 나는지 모르겠습니다
-
미해결CSS에 날개를 달아주는 Sass (SCSS)
설정 관련해서 질문 드립니다.
선생님! 혹시 현재 vscode 버전으로 sass초기설정/경로 설정하는 방법좀 알려 주실수있을까요?ㅠㅠ 현재 강의에 올라와있는 vscode 버전이랑 2020년도 현재 버전이 다르다보니 그.scss폴더 위치 선정위해서 작업영역에서 설정하는 부분도 그렇고, live sass compiler 그..config파트 복사 해서 넣는부분도 지금 가서 보면 없어서..강의를 보면서도 따라할수가 없네요 ㅠㅠ 따라하면서도 이게 맞나싶어서 계속 헤매고 있어서요 ㅠㅠ.., 혹시 간략하게라도 좀 알려주실수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
뒷광고아닌가요!ㅎㅎ
H2 데이터베이스 설치 편 - 01:24초 뒷광고 의심스럽습니다ㅋㅋ 그리고 무료로 좋은 강의 만들어주셔서 너무 감사합니다!ㅎㅎ
-
미해결눈떠보니 코딩테스트 전날
5 10 66 77 54 32 11 15 는 분활을 결과입니다
5, 10, 66, 77, 54, 32, 11, 15 는 분활을 결과입니다 그렇다면 여기서 그룹하나와 그룹둘은 어떻게 나뉘는건가요?
-
미해결애플 웹사이트 인터랙션 클론!
1024px 이하에서 desc-message width 반영 오류
질문을 작성해놓고 모르고 삭제해버렸어요 ㅠㅠ 제목 그대로 desc-message가 화면 1024px미만에서는 width 50%가 적용되어야하는데 적용이 안되더라구요. 그래서 main-message처럼 #scroll-section-2 .main-message 앞에 #scroll-section-2 붙이니 잘 적용이 되더라구요. 혹시 css 작성할 때 부모 언급해야하는 경우와 아닌 경우 알려주실 수 있으실까요?🙏🙏 위와 같은 오류가 종종 발생하는데 제가 원인을 찾지 못해서 부모를 언급해서 css를 작성하니 코드가 길어질 때가 많아서요 ㅠㅠ
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
안녕하세요. remove_follower_request가 무한으로
발생하는 상황때문에 질문 드려요. User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 3.902 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 3.775 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 4.127 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 4.112 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 3.943 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 4.019 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 3.774 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 4.700 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 5.367 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 'undefined'; DELETE /user/follower/undefined 403 9.147 ms - 24 Executing (default): SELECT `id`, `email`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; 지금 해결해보려고 몇시간 째 계속 시도중이긴한데 감이 안잡히네요 ㅠㅠ 백엔드 껏다 켜보면 지워져있긴하는데 버튼 누르면 무한 리퀘스트가 발생해요. 강의는 감사히 보고있습니다.!!
-
해결됨유니티(Unity)로 시작하는 게임개발: Part 1. 컴퓨터 구조 입문
윈도우 사용자도 이용할수 있는 에버노트 같은 프로그램이 있을까요?
선생님께서 제안해 주신 공부방법이 정말 효율적이면서 동기부여가 잘될 것 같아서 그대로 한번 따라해보려고 하는데요 아쉽게도 제가 윈도우 사용자라서요. 에버노트는 보니까 맥북 사용자만 쓸수 있는 것 같은데 혹시 윈도우 사용자는 어떤 프로그램으로 에버노트 같은 효과를 볼수 있을지 추천해 주시면 감사하겠습니다!
-
미해결홍정모의 따라하며 배우는 C언어
3.13 불리언형
1. 콘솔창에서 출력값 2번째 있는 1의 값이 b1 = 1을 받아서 출력이 된거 같은데 b1 = 0을 받은 다음 b1 = 1로 다시 받아서 출력값이 1이 나온거죠? 2. bool에서 기억해야하는것은 0은 false고 true는 1이다 라고 말씀을 하셨는데 그 의도가 궁금합니다. 11줄: b1 = 0 12줄: b1 = 1 대신 각 각 b1 = false , b1 = true 라고 써도 된다라는 목적으로 말씀하신건지 아니면 다른 의도가 있어서 말씀하신건지요? 3. bool을 쓰는 목적(용도)가 궁금합니다. 강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다.
-
미해결파이썬 무료 강의 (활용편2) - GUI 프로그래밍 (4시간)
기본기 11_messagebox 질문입니다
def yesno(): msgbox.askyesno("예 / 아니요","해당 좌석은 역방향입니다. 예매하시겠습니까?") def yesnocancel(): response = msgbox.askyesnocancel(title = None, message = "예매 내역이 저장되지 않았습니다. \n저장하시겠습니까?") yesnocancel 함수 부분에서는 askyesnocancel 메소드를 사용할 때 title이 없고 message를 따로 넣고 yesno 함수 부분에서는 askyesno 메소드를 사용할 때 다르게 짜셨잖아요 이게 askyesno와 askyesnocancel 을 사용할 때의 차이인가요 아니면 둘이 똑같이 사용할 수 있는 방법인가요? 그리고 왜 타이틀을 지정해주는지 궁금합니다!
-
미해결[백문이불여일타] 데이터 분석을 위한 중급 SQL
해커랭크 Top Earners 관련 질문 드립니다
안녕하세요:) 해커랭크 Top Earners 관련 질문 드립니다! -문제: 해커랭크 Top Earners -질문: 아래쿼리에서 왜 에러가 나는지, MAX와 관련이 있는건지 궁금합니다. -오답: SELECT employee_id, name, MAX(months * salary) AS total_earningsFROM employee 정답은 강의를 통해 알고 있는데, 위 쿼리에서 어떤 부분이 문제인지 궁금합니다ㅎㅎ 감사합니다!
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
질문 두가지 있습니다!
안녕하세요 강의 잘 듣고 있습니다! 1. 입력받을때, n=int(input()) meeting=[] for _ in range(n): s,e=map(int,input().split()) meeting.append((s,e)) 의 방식을 사용하신 이유가 있을까요...? 밑에 내용처럼 하면, 변수도 줄어들어 더 빠르게 처리할 수 있을것 같은데, 혹시 윗 내용처럼 변수를 입력하고 그 변수를 다시 배열에 집어넣으신 이유가 있는지 궁금합니다. n=int(input()) room=[] for _ in range(n): room.append(tuple(map(int,input().split()))) 2. 리스트가 아닌 튜플 구조를 사용하신 이유가 있을까요? 계속 리스트만 사용하다가 튜플을 사용하려니 뭔가 좀 어색해서 여쭤봅니다!
-
미해결남박사의 파이썬 기초부터 실전 100% 활용
chardet 이 import가 안되는데..
chardet 을 import 할 수 없다고 나옵니다.. pip 으로 설치도 하였고 설치경로도 확인해봤으며 uninstall 후 install로 새로 깔아도 import가 안되는데 어떤 문제일까요..ㅠ
-
미해결WEB2 - PHP
form과 post에서 질문이 생겼습니다.
get방식까지 따라 했는데, 계속 submit 을 누르고나면 php주소로 바뀌는게 아니라 파일이 다운로드 됩니다....form.php 파일이 자동으로 다운로드 되요... 제가 이것 정답찾으려고 인터넷 많이 검색해 봤는데... 답을 찾지 못해서... 혹시 왜 그런지 아시는지요ㅠㅠ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
lt설정에 관한 질문
안녕하세요? 강의 잘 보고 있습니다. 다름이아니라, lt와 rt를 설정할때, 각각 디스크 용량의 최대/최소로 알고있는데, 선생님께서는 lt를 1로 설정하였는데 그게 아니라 음악들의 최소값인 min(music)이 들어가야 맞지 않나요..? 아니라면 무엇을 제가 놓쳤는지 설명해주시면 감사하겠습니다..
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
dev c++ 작동오류
dev c++로 코딩하는데 while(1) 이나 sizeof(..) 같은 문법이나 함수가 제대로 작동하지 않습니다. 같은 코드를 visual studio에서 돌리면 작동을 합니다. 컴파일러는 tmd-gcc 최신버전 사용하고 있습니다.이유가 무엇인지 궁금합니다. 또한 dev c++ 대신 visual studio를 사용해도 되는지요? (visual을 사용하면 체점받는 것은 어렵다는 것은 알고있습니다)
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
강의 잘 듣고 있습니다. 프로젝트 진행중 답답한 상황이 생겨 질문드립니다.
강의와 관련없는 질문이라 조심스럽게 남겨 봅니다. Main.vue - Home.vue - PrpSearch.vue 구조인데 Main.vue에 <top-menu /> <router-view /> 두가지가 구성되어 있는데 Home.vue로 라우팅할시 top-menu는 노출하지 않고 PrpSearch.vue로 라우팅시 top-menu가 노출되는 형태가 되어야 하는데 간단한듯한데 쉽지 않네요. routes 구성은 { path: "/", component: () => import("@views/Main.vue"), children : [ { path: '/', name:'Home' , component: () => import("@views/home/Home.vue") }, { path: '/rnd/prp-search', name:'PrpSearch' , component: () => import("@views/rnd/PrpSearch.vue") }, ] }, 입니다. 감사합니다.
-
미해결자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
13:00에서 서버로 실행시 404 오류가 나옵니다
요청된 리소스는 가용하지 않는다는 메시지가 나옵니다 톰캣 servers폴더의 server.xml에 <context> 부분이 사라져있던데 이부분 때문에 오류가 나오는걸까요??
-
미해결애플 웹사이트 인터랙션 클론!
안녕하세요. 실행 오류가 뜨는데 질문드립니다
(() => { let yOffset = 0; //window.pageOffset 대신 쓸 수 있는 변수 let prevScrollHeight = 0 // 현재 스크롤 (yOffset)보다 이전에 위치한 스크롤 높이값의 함 let currentScene = 0; // 현재 활성화된 (눈앞에 보고 있는) 씬(scroll-section) let enterNewScene = false; const sceneInfo = [ { // 0 type: 'sticky', heightNum: 5, //브라우저 높이의 5배로 scrollheight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-0'), messageA: document.querySelector('#scroll-section-0 .main-message.a'), messageB: document.querySelector('#scroll-section-0 .main-message.b'), messageC: document.querySelector('#scroll-section-0 .main-message.c'), messageD: document.querySelector('#scroll-section-0 .main-message.d') }, values: { // 글자 구간과 선명도를 지정 하는 역할 messageA_opacity_in: [0, 1, { start: 0.1, end: 0.2 }], messageB_opacity_in: [0, 1, { start: 0.3, end: 0.4 }], messageC_opacity_in: [0, 1, { start: 0.5, end: 0.6 }], messageD_opacity_in: [0, 1, { start: 0.7, end: 0.8 }], messageA_translate_in: [20, 0, { start: 0.1, end: 0.2 }], messageB_translate_in: [20, 0, { start: 0.3, end: 0.4 }], messageC_translate_in: [20, 0, { start: 0.5, end: 0.6 }], messageD_translate_in: [20, 0, { start: 0.7, end: 0.8 }], messageA_opacity_out: [1, 0, { start: 0.25, end: 0.3 }], messageB_opacity_out: [1, 0, { start: 0.45, end: 0.5 }], messageC_opacity_out: [1, 0, { start: 0.65, end: 0.7 }], messageD_opacity_out: [1, 0, { start: 0.85, end: 0.9 }], messageA_translate_out: [0, -20, { start: 0.25, end: 0.3 }], messageA_translate_out: [0, -20, { start: 0.45, end: 0.5 }], messageA_translate_out: [0, -20, { start: 0.65, end: 0.7 }], messageA_translate_out: [0, -20, { start: 0.85, end: 0.9 }], } }, { // 1 type: 'normal', // heightNum: 5, //브라우저 높이의 5배로 scrollheight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-1') } }, { // 2 type: 'sticky', heightNum: 5, //브라우저 높이의 5배로 scrollheight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-2'), messageA: document.querySelector('#scroll-section-2 .a'), messageB: document.querySelector('#scroll-section-2 .b'), messageC: document.querySelector('#scroll-section-2 .c'), pinB: document.querySelector('#scroll-section-2 .b .pin'), pinC: document.querySelector('#scroll-section-2 .c .pin'), }, values: { messageA_translateY_in: [20, 0, { start: 0.15, end: 0.2 }], messageB_translateY_in: [30, 0, { start: 0.6, end: 0.65 }], messageC_translateY_in: [30, 0, { start: 0.87, end: 0.92 }], messageA_opacity_in: [0, 1, { start: 0.25, end: 0.3 }], messageB_opacity_in: [0, 1, { start: 0.6, end: 0.65 }], messageC_opacity_in: [0, 1, { start: 0.87, end: 0.92 }], messageA_translateY_out: [0, -20, { start: 0.4, end: 0.45 }], messageB_translateY_out: [0, -20, { start: 0.68, end: 0.73 }], messageC_translateY_out: [0, -20, { start: 0.95, end: 1 }], messageA_opacity_out: [1, 0, { start: 0.4, end: 0.45 }], messageB_opacity_out: [1, 0, { start: 0.68, end: 0.73 }], messageC_opacity_out: [1, 0, { start: 0.95, end: 1 }], pinB_scaleY: [0.5, 1, { start: 0.6, end: 0.65 }], pinC_scaleY: [0.5, 1, { start: 0.87, end: 0.92 }] } }, { // 3 type: 'sticky', heightNum: 5, //브라우저 높이의 5배로 scrollheight 세팅 scrollHeight: 0, objs: { container: document.querySelector('#scroll-section-3') } }, ]; function setLayout() { // 각 section 의 높이 세팅 for (let i = 0; i < sceneInfo.length; i++) { if (sceneInfo[i].type === 'sticky') { sceneInfo[i].scrollHeight = sceneInfo[i].heightNum * window.innerHeight; } else if (sceneInfo[i].type === 'normal') { sceneInfo[i].scrollHeight = sceneInfo[i].objs.container.offsetHeight; } sceneInfo[i].objs.container.style.height = `${sceneInfo[i].scrollHeight}px` } let totalScrollHeight = 0; yOffset = window.pageYOffset; // 새로고침 버튼 눌렀을때 그 씬 장면이 유지 될 수 있게 해주는 역할 for (let i = 0; i < sceneInfo.length; i++) { totalScrollHeight += sceneInfo[i].scrollHeight; if (totalScrollHeight >= yOffset) { currentScene = i; break } } document.body.setAttribute('id', `show-scene-${currentScene}`) } function calcValues(values, currentYOffset) { let rv; //현재 씬(스크롤 섹션)애서 스크롤된 범위를 비율로 구하기 const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = currentYOffset / scrollHeight; if (values.length === 3) { // start ~ end 사이에 애니메이션 진행 const partStart = values[2].start * scrollHeight const partEnd = values[2].end * scrollHeight const partScrollHeight = partEnd - partStart; if (currentYOffset <= partEnd && currentYOffset >= partStart) { rv = (currentYOffset - partStart) / partScrollHeight * (values[1] - values[0]) + values[0]; } else if (currentYOffset < partStart) { rv = values[0]; } else if (currentYOffset > partEnd) { rv = values[1]; } } else { rv = scrollRatio * (values[1] - values[0]) + values[0]; } return rv; } function playAinmation() { const objs = sceneInfo[currentScene].objs; const values = sceneInfo[currentScene].values; const currentYOffset = yOffset - prevScrollHeight; const scrollHeight = sceneInfo[currentScene].scrollHeight; const scrollRatio = currentYOffset / scrollHeight; // console.log(currentScene) switch (currentScene) { case 0: // calcValues = (values의 선명도, 현재 스크롤의 위치 if (scrollRatio <= 0.22) { // in objs.messageA.style.opacity = calcValues(values.messageA_opacity_in, currentYOffset); objs.messageA.style.transform = `translateY(${calcValues(values.messageA_translate_in, currentYOffset)}%)`; } else { // out objs.messageA.style.opacity = calcValues(values.messageA_opacity_out, currentYOffset); objs.messageA.style.transform = `translateY(${calcValues(values.messageA_translate_out, currentYOffset)}%)`; } if (scrollRatio <= 0.42) { objs.messageB.style.opacity = calcValues(values.messageB_opacity_in, currentYOffset); objs.messageB.style.transform = `translateY(${calcValues(values.messageB_translate_in, currentYOffset)}%)` } else { objs.messageB.style.opacity = calcValues(values.messageB_opacity_out, currentYOffset); objs.messageB.style.transform = `translateY(${calcValues(values.messageB_translate_out, currentYOffset)}%)`; } if (scrollRatio <= 0.62) { objs.messageC.style.opacity = calcValues(values.messageC_opacity_in, currentYOffset); objs.messageC.style.transform = `translateY(${calcValues(values.messageC_translate_in, currentYOffset)}%)` } else { objs.messageC.style.opacity = calcValues(values.messageC_opacity_out, currentYOffset); objs.messageC.style.transform = `translateY(${calcValues(values.messageC_translate_out, currentYOffset)}%)`; } if (scrollRatio <= 0.82) { objs.messageD.style.opacity = calcValues(values.messageD_opacity_in, currentYOffset); objs.messageD.style.transform = `translateY(${calcValues(values.messageD_translate_in, currentYOffset)}%)` } else { objs.messageD.style.opacity = calcValues(values.messageD_opacity_out, currentYOffset); objs.messageD.style.transform = `translateY(${calcValues(values.messageD_translate_out, currentYOffset)}%)`; } break; case 1: break; case 2: break; case 3: break; } } function scrollLoop() { enterNewScene = false prevScrollHeight = 0 for (let i = 0; i < currentScene; i++) { prevScrollHeight += sceneInfo[i].scrollHeight; } if (yOffset > prevScrollHeight + sceneInfo[currentScene].scrollHeight) { enterNewScene = true currentScene++; document.body.setAttribute('id', `show-scene-${currentScene}`) } if (yOffset < prevScrollHeight) { enterNewScene = true if (currentScene === 0) // 브라우저 바운스 효과로 인해 마이너스가 되는 것을 방지 return currentScene--; document.body.setAttribute('id', `show-scene-${currentScene}`) } // 마이너스 나오는 오류를 잡아주기 위한 역할 if (enterNewScene) return; playAinmation() } window.addEventListener('scroll', () => { yOffset = window.pageYOffset; scrollLoop() }); window.addEventListener('resize', setLayout); window.addEventListener('load', setLayout); })()
-
미해결초보자도 만들 수 있는 스크롤 인터렉션. 1편 자바스크립트
section 5 - set 3번에서 질문있습니다.
선생님 안녕하세요! 궁금한게 있어서 글을 올렸습니다. section5 의 set3 폴더의 index.html에서 parallaxMoveDistance = Math.max(parallaxStartValue - parallaxStartValue, Math.min(parallaxStartValue, parallaxStartValue - (parallaxStartValue * (parallaxPercent / 100)))); 로 수식을 입력하셨는데 어떠한 이유로 저렇게 식을 사용하셨는지 궁금합니다. 계속 보다가 헷갈려서 도움의 손길을 요청합니다..ㅜ