728x90
반응형
티스토리 꾸미기
tistory
-
이전글 다음글
플로팅
추천 글 기능 만들기
#1
들어가면서..
- 먼저 상미넴님 티스토리에서 가져온 코드와 구글링하면서 코드팬에 귀염귀염한 박줄리님이 만드신(?) 디자인이 있어서 한번 믹스해 보았다.
- 코드는 상미넴님 티스토리
https://sangminem.tistory.com/574
- 디자인은 코드팬 juliepark님 (줄리박?님... 우리나라사람인가..)
https://codepen.io/juliepark/pen/vjMOKQ
준비 - css작업
- 근데 문제가 박줄리님 코드팬에 들어가서 CSS에 보면..scss를 사용하고있는데, 티스토리는 css만 지원한다.
- 일단 css부분에 34 line부터 254 line까지 복사해서 메모장같은데 붙여 넣은 다음 변수부분을 하나씩 전부 replaceall 해준다.
- 기능이 좀 있는 편집툴을 사용하면 편하다.
- 그리고 #success-box 에 width와 height는 각각 294px; 250px;로 바꿔주고 혹시 css class나 id가 중복나는걸 방지하기 위해서 .recommend-contents-wrap 를 붙여준다. (나중에 html 에 넣을때도 div로 한번 감싸고 클래스명을 recommend-contents-wrap 이걸로 줄 예정..)
- .recommend-contents-wrap button의 pointer-events에 initial 을 준다. ( 버튼에 포인터 이벤트를 티스토리에서 자체 css에서 none을 주고있음 )
.recommend-contents-wrap button {
pointer-events : initial;
}
- 변경 다했으면 darken 이라는 함수를 변경해줘야 한다. darken 함수는 scss에서 사용하는 함수로 지정된 컬러($color) 를 지정한 퍼센트만큼 ($amount) HSL 밝기를 줄이는 함수인데 티스토리에는 사용할 수 없으니 color : 컬러, brightness(90%) 함수 로 전부 바꿔준다.
darken($color, $amount) //=> color
- darken(#777777, 20%) 였다면 아래처럼 바꾸면된다. (퍼센트는 본인이 보고 적당하게 바꾸면된다)
/* font color면 아래처럼 */
color: #777777;
filter: brightness(90%);
/* background color면 아래처럼 */
background: #777777;
filter: brightness(90%);
- 또 사스전용이 하나 더있다 &:hover, 이걸 다 찾아서 다음과 같이 변경시켜준다.
/* 변경전 */
.recommend-contents-wrap .dot {
width: 8px;
height: 8px;
background: #FCFCFC;
border-radius: 50%;
position: absolute;
top: 4%;
right: 6%;
&:hover {
background: #FCFCFC;
filter: brightness(80%);
}
}
/* 변경 후 */
.recommend-contents-wrap .dot {
width: 8px;
height: 8px;
background: #FCFCFC;
border-radius: 50%;
position: absolute;
top: 4%;
right: 6%;
}
.recommend-contents-wrap .dot:hover {
background: #FCFCFC;
filter: brightness(80%);
}
- 여기까지 완료된 CSS소스
.recommend-contents-wrap h1 {
font-size: 0.9em;
font-weight: 100;
letter-spacing: 3px;
padding-top: 5px;
color: #FCFCFC;
padding-bottom: 5px;
text-transform: uppercase;
}
.recommend-contents-wrap .green {
color: #99DBB4;
filter: brightness(90%);
}
.recommend-contents-wrap .red {
color: #EF8D9C;
filter: brightness(90%);
}
.recommend-contents-wrap .alert {
font-weight: 700;
letter-spacing: 5px;
}
.recommend-contents-wrap p {
margin-top: -5px;
font-size: 0.5em;
font-weight: 100;
color: #777777;
filter: brightness(90%);
letter-spacing: 1px;
}
.recommend-contents-wrap button, .recommend-contents-wrap .dot {
cursor: pointer !important;
}
.recommend-contents-wrap #success-box {
width: 294px;
height: 250px;
left: 12%;
background: linear-gradient(to bottom right, #B0DB7D 40%, #99DBB4 100%);
border-radius: 20px;
box-shadow: 5px 5px 20px rgba(#CBCDD3, 10%);
perspective: 40px;
}
.recommend-contents-wrap #error-box {
position: absolute;
width: 35%;
height: 100%;
right: 12%;
background: linear-gradient(to bottom left, #EF8D9C 40%, #FFC39E 100%);
border-radius: 20px;
box-shadow: 5px 5px 20px rgba(#CBCDD3, 10%);
}
.recommend-contents-wrap .dot {
width: 8px;
height: 8px;
background: #FCFCFC;
border-radius: 50%;
position: absolute;
top: 4%;
right: 6%;
}
.recommend-contents-wrap .dot:hover {
background: #FCFCFC;
filter: brightness(80%);
}
.recommend-contents-wrap .two {
right: 12%;
opacity: .5;
}
.recommend-contents-wrap .face {
position: absolute;
width: 22%;
height: 22%;
background: #FCFCFC;
border-radius: 50%;
border: 1px solid #777777;
top: 21%;
left: 37.5%;
z-index: 2;
animation: recommend-contents-wrap-bounce 1s ease-in infinite;
}
.recommend-contents-wrap .face2 {
position: absolute;
width: 22%;
height: 22%;
background: #FCFCFC;
border-radius: 50%;
border: 1px solid #777777;
top: 21%;
left: 37.5%;
z-index: 2;
animation: recommend-contents-wrap-roll 3s ease-in-out infinite;
}
.recommend-contents-wrap .eye {
position: absolute;
width: 5px;
height: 5px;
background: #777777;
border-radius: 50%;
top: 40%;
left: 20%;
}
.recommend-contents-wrap .right {
left: 68%;
}
.recommend-contents-wrap .mouth {
position:absolute;
top: 43%;
left: 41%;
width: 7px;
height: 7px;
border-radius: 50%;
}
.recommend-contents-wrap .happy {
border: 2px solid;
border-color: transparent #777777 #777777 transparent;
transform: rotate(45deg);
}
.recommend-contents-wrap .sad {
top: 55%;
border-radius: 100% !important;
border: 2px solid;
border-color: #777777;
}
.recommend-contents-wrap .shadow {
position: absolute;
width: 21%;
height: 3%;
opacity: .5;
background: #777777;
left: 40%;
top: 43%;
border-radius: 50%;
z-index: 1;
}
.recommend-contents-wrap .scale {
animation: recommend-contents-wrap-scale 1s ease-in infinite;
}
.recommend-contents-wrap .move {
animation: recommend-contents-wrap-move 3s ease-in-out infinite;
}
.recommend-contents-wrap .message {
position: absolute;
width: 100%;
text-align: center;
height: 40%;
top: 47%;
}
.recommend-contents-wrap .button-box {
position: absolute;
background: #FCFCFC;
width: 50%;
height: 15%;
border-radius: 20px;
top: 73%;
left: 25%;
outline: 0;
border: none;
box-shadow: 2px 2px 10px rgba(#777777, .5);
transition: all .5s ease-in-out;
}
.recommend-contents-wrap .button-box:hover {
background: #FCFCFC;
filter: brightness(95%);
transform: scale(1.05);
transition: all .3s ease-in-out;
}
.recommend-contents-wrap button {
pointer-events : initial;
}
@keyframes recommend-contents-wrap-bounce {
50% {
transform: translateY(-10px);
}
}
@keyframes recommend-contents-wrap-scale {
50% {
transform: scale(0.9);
}
}
@keyframes recommend-contents-wrap-roll {
0% {
transform: rotate(0deg);
left: 25%;
}
50% {
left: 60%;
transform: rotate(168deg);
}
100% {
transform: rotate(0deg);
left: 25%;
}
}
@keyframes recommend-contents-wrap-move {
0% {
left: 25%;
}
50% {
left: 60%;
}
100% {
left: 25%;
}
}
- 이제 스킨편집 > html 편집 누르고 css 에 들어가서 맨 끝에 붙여 넣기 해준다.
준비 - html작업
- css 작업은 일단 끝났으니, html 작업을 진행한다.
- Body 끝부분에 아래 내용을 를 집어넣어준다.
<script>
var prePostFlag = true;
var nextPostFlag = true;
function makeRecommendBlock(type, currentIndex) {
if(prePostFlag && type == 'pre') {
prePostFlag = false;
$('#pre-content').append($('.another_category tr').eq(currentIndex+1).find('a').clone());
$('#next-content').append('<a href="#" class="no-post">다음 글 없음</a>');
$('.content-box .content-arrow').eq(1).addClass('no-post');
} else if(nextPostFlag && type == 'next') {
nextPostFlag = false;
$('#next-content').append($('.another_category tr').eq(currentIndex-1).find('a').clone());
$('#pre-content').append('<a href="#" class="no-post">이전 글 없음</a>');
$('.content-box .content-arrow').eq(0).addClass('no-post');
} else if(prePostFlag && nextPostFlag && type == 'both') {
prePostFlag = false;
nextPostFlag = false;
$('#pre-content').append($('.another_category tr').eq(currentIndex+1).find('a').clone());
$('#next-content').append($('.another_category tr').eq(currentIndex-1).find('a').clone());
}
}
var recommendPostFlag = true;
var recommendPostTimer = 0;
var preRecommendPosition = -1;
function recommendPost() {
if($('.another_category').length > 0) {
var position = window.scrollY/($('.another_category').offset().top-window.innerHeight);
if(position > 1 && window.scrollY-$('.another_category').offset().top < 0 && preRecommendPosition < window.scrollY) {
if(recommendPostFlag) {
recommendPostFlag = false;
var anotherCategory = $('.another_category tr');
var currentIndex = -1;
if(anotherCategory.length > 1) {
for(var i=0;i<anotherCategory.length;i++) {
if(anotherCategory.eq(i).find('a.current').length > 0) {
currentIndex = i;
break;
}
}
if(currentIndex > 0 && currentIndex < anotherCategory.length-1) { //이전 글, 다음 글 가능
makeRecommendBlock('both', currentIndex);
} else {
if(currentIndex == 0) { //이전 글 가능
makeRecommendBlock('pre', currentIndex);
} else if(anotherCategory.length > 1) { //다음 글 가능
makeRecommendBlock('next', currentIndex);
}
}
}
if((!prePostFlag || !nextPostFlag) && recommendPostTimer == 0) {
var rightMargin = 0;
if(window.innerWidth > 310) {
rightMargin = 10;
} else {
rightMargin = (window.innerWidth - 310) / 2;
}
var bottomMargin = 75;
$('#recommend-contents').css('bottom', bottomMargin+'px');
$('#recommend-contents').css('right', '-350px');
$('#recommend-contents').css('display','block');
recommendPostTimer = $('#recommend-contents').animate({'right':rightMargin+'px'}, 1000, 'swing', function() {});
recommendPostTimer = setTimeout(function() {
$('#recommend-contents').animate({'right':'-350px'}, 1000, 'swing', function() {
$('#recommend-contents').css('display','none');
recommendPostTimer = 0;
});
}, 300000);
}
}
} else {
recommendPostFlag = true;
}
preRecommendPosition = window.scrollY;
}
}
$(window).on('scroll resize', function() {
recommendPost();
});
</script>
- 그리고 <footer> 위에 아래 html 을 넣어준다.
(css작성할때 말한대로 div class="recommend-contents-wrap" 으로 감싸줬다)
<div id="recommend-contents" class="recommend-contents-wrap" style="display:none;">
<div id="success-box">
<div class="dot"></div>
<div class="dot two"></div>
<div class="face">
<div class="eye"></div>
<div class="eye right"></div>
<div class="mouth happy"></div>
</div>
<div class="shadow scale"></div>
<div class="message"><h1 class="alert">Success!</h1><p>yay, everything is working.</p></div>
<button class="button-box"><h1 class="green">continue</h1></button>
</div>
</div>
1차 확인
- 일단 원하는데로 나오는지 보면 원하는데로 나온다.
다음글에서 상미넴님 스크립트와 동일하게 동작하도록 기능을 추가해보자.
728x90
반응형