2017-10-09 2 views
0

javascript 함수 slideToggle()이 상태를 유지하려고합니다. 지금은 페이지를 새로 고칠 때마다 정보가 손실됩니다. 쿠키 또는 localstorage를 사용하여 수행 할 수 있다는 것을 알고 있지만 그렇게하지 못했습니다.내 경우에는 slideToggle()의 상태를 어떻게 유지할 수 있습니까?

누군가 내 코드에서 솔루션을 구현하는 방법을 보여줄 수 있다면 정말 감사 할 것입니다.

//toggle hide/show shout box 
$(".close_btnn").click(function (e) { 
    //get CSS display state of .toggle_chat element 
      var toggleState = $('.toggle_chat').css('display'); 
    //toggle show/hide chat box 
    $('.toggle_chat').slideToggle(); 

    //use toggleState var to change close/open icon image 
    if(toggleState == 'block') 
    { 
     $(".header div").attr('class', 'open_btnn'); 
    }else{ 
     $(".header div").attr('class', 'close_btnn'); 

    } 


}); 

shoutbox가있는 페이지의 HTML/PHP입니다.

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<style type="text/css"> 
<!-- 
.shout_box { 
background: #000000; 
width: 260px; 
overflow: hidden; 
position: fixed; 
bottom: 0; 
right: 10px; 
z-index:9; 
} 
.shout_box .header .close_btn { 
background: url(close_btn.gif) no-repeat 0px 0px; 
float: right; 
width: 15px; 
height: 15px; 
} 
.shout_box .header .close_btn:hover { 
background: url(close_btn.gif) no-repeat 0px -16px; 
} 

.shout_box .header .open_btn { 
background: url(close_btn.gif) no-repeat 0px -32px; 
float: right; 
width: 15px; 
height: 15px; 
} 
.shout_box .header .open_btn:hover { 
background: url(close_btn.gif) no-repeat 0px -48px; 
} 
.shout_box .header{ 
padding: 5px 3px 5px 5px; 
font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
font-weight: bold; 
color:#fff; 
border: 1px solid rgba(0, 39, 121, .76); 
border-bottom:none; 
cursor: pointer; 
} 
.shout_box .header:hover{ 
background-color: #000000; 
} 
.shout_box .message_box { 
background: #FFFFFF; 
height: 200px; 
overflow:auto; 
border: 1px solid #CCC; 
} 
.shout_msg{ 
margin-bottom: 10px; 
display: block; 
border-bottom: 1px solid #F3F3F3; 
padding: 0px 5px 5px 5px; 
font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
color:#7C7C7C; 
} 
.message_box:last-child { 
border-bottom:none; 
} 
time{ 
    font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
font-weight: normal; 
float:right; 
color: #D5D5D5; 
} 
.shout_msg .username{ 
margin-bottom: 10px; 
margin-top: 10px; 
} 
.user_info input { 
width: 98%; 
height: 25px; 
border: 1px solid #CCC; 
border-top: none; 
padding: 3px 0px 0px 3px; 
font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
} 
.shout_msg .username{ 
font-weight: bold; 
display: block; 
} 
--> 
</style> 

<script type="text/javascript" src="shoutbox/jquery-1.9.0.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 

// load messages every 1000 milliseconds from server. 
load_data = {'fetch':1}; 
//window.setInterval(function(){ 
$.post('shoutbox/shout.php', load_data, function(data) { 
    $('.message_box').html(data); 
    var scrolltoh = $('.message_box')[0].scrollHeight; 
    $('.message_box').scrollTop(scrolltoh); 
}); 
//}, 1000); 

//method to trigger when user hits enter key 
$("#shout_message").keypress(function(evt) { 
    if(evt.which == 13) { 
      var iusername = "java"; 
      var imessage = $('#shout_message').val(); 
      post_data = {'username':iusername, 'message':imessage}; 

      //send data to "shout.php" using jQuery $.post() 
      $.post('shoutbox/shout.php', post_data, function(data) { 

       //append data into messagebox with jQuery fade effect! 
       $(data).hide().appendTo('.message_box').fadeIn(); 

       //keep scrolled to bottom of chat! 
       var scrolltoh = $('.message_box')[0].scrollHeight; 
       $('.message_box').scrollTop(scrolltoh); 

       //reset value of message box 
       $('#shout_message').val(''); 

      }).fail(function(err) { 

      //alert HTTP server error 
      alert(err.statusText); 
      }); 
     } 
}); 

//toggle hide/show shout box 
$(".close_btn").click(function (e) { 
    //get CSS display state of .toggle_chat element 
    var toggleState = $('.toggle_chat').css('display'); 

    //toggle show/hide chat box 
    $('.toggle_chat').slideToggle(); 

    //use toggleState var to change close/open icon image 
    if(toggleState == 'block') 
    { 
     $(".header div").attr('class', 'open_btn'); 
    }else{ 
     $(".header div").attr('class', 'close_btn'); 
    } 


}); 
}); 

</script> 
</head> 

<body> 
<div class="shout_box"> 
<div class="header">Shout Box <div class="close_btn">&nbsp;</div></div> 
    <div class="toggle_chat"> 
    <div class="message_box"> 
    </div> 
    <div class="user_info"> 

    <input name="shout_message" id="shout_message" type="text" placeholder="Type Message Hit Enter" maxlength="100" /> 
    </div> 
    </div> 
</div> 
</body> 
</html> 
+0

의 jsbin입니까? 브라우저 새로 고침 후에도 대화 상자를 열어 두길 원하십니까? 자바 스크립트 html을 제공 할 수 있습니까? 상태를 유지하기 위해 충족되어야하는 조건이 있어야합니다. 이는 프로젝트에서 무엇입니까? – azs06

+0

나는 현재 페이지를 새로 고칠 때마다 기본적으로 채팅 상자가 항상 열려 있음을 의미합니다. 사용자가 사이트를 닫으면 사용자가 사이트를 열 때마다 닫힙니다. (이전 게시물을 편집하여 페이지의 전체 HTML을 표시) –

답변

1

localstorage를 사용하여 할 수있는 방법이다. 여기

$(document).ready(function() { 
 
var $shoutBox = $('#shout-box'); 
 
var isShoutBoxClosed = JSON.parse(localStorage.getItem('shoutBoxClosed')); 
 
if(isShoutBoxClosed){ 
 
\t $shoutBox.hide(); 
 
} \t 
 
//toggle hide/show shout box 
 
$(".close_btn").click(function (e) { 
 
\t //save users preference on localstoage 
 
\t localStorage.setItem('shoutBoxClosed', true); 
 
    //toggle show/hide chat box 
 
    $shoutBox.slideToggle(); 
 

 
}); 
 
\t 
 
});
.shout_box { 
 
background: #000000; 
 
width: 260px; 
 
overflow: hidden; 
 
position: fixed; 
 
bottom: 0; 
 
right: 10px; 
 
z-index:9; 
 
} 
 
.shout_box .header .close_btn { 
 
background: url(close_btn.gif) no-repeat 0px 0px; 
 
float: right; 
 
width: 15px; 
 
height: 15px; 
 
} 
 
.shout_box .header .close_btn:hover { 
 
background: url(close_btn.gif) no-repeat 0px -16px; 
 
} 
 

 
.shout_box .header .open_btn { 
 
background: url(close_btn.gif) no-repeat 0px -32px; 
 
float: right; 
 
width: 15px; 
 
height: 15px; 
 
} 
 
.shout_box .header .open_btn:hover { 
 
background: url(close_btn.gif) no-repeat 0px -48px; 
 
} 
 
.shout_box .header{ 
 
padding: 5px 3px 5px 5px; 
 
font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
 
font-weight: bold; 
 
color:#fff; 
 
border: 1px solid rgba(0, 39, 121, .76); 
 
border-bottom:none; 
 
cursor: pointer; 
 
} 
 
.shout_box .header:hover{ 
 
background-color: #000000; 
 
} 
 
.shout_box .message_box { 
 
background: #FFFFFF; 
 
height: 200px; 
 
overflow:auto; 
 
border: 1px solid #CCC; 
 
} 
 
.shout_msg{ 
 
margin-bottom: 10px; 
 
display: block; 
 
border-bottom: 1px solid #F3F3F3; 
 
padding: 0px 5px 5px 5px; 
 
font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
 
color:#7C7C7C; 
 
} 
 
.message_box:last-child { 
 
border-bottom:none; 
 
} 
 
time{ 
 
    font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
 
font-weight: normal; 
 
float:right; 
 
color: #D5D5D5; 
 
} 
 
.shout_msg .username{ 
 
margin-bottom: 10px; 
 
margin-top: 10px; 
 
} 
 
.user_info input { 
 
width: 98%; 
 
height: 25px; 
 
border: 1px solid #CCC; 
 
border-top: none; 
 
padding: 3px 0px 0px 3px; 
 
font: 11px 'lucida grande', tahoma, verdana, arial, sans-serif; 
 
} 
 
.shout_msg .username{ 
 
font-weight: bold; 
 
display: block; 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
</head> 
 

 
<body> 
 
<div id="shout-box" class="shout_box"> 
 
<div class="header">Shout Box <div class="close_btn">X</div></div> 
 
    <div class="toggle_chat"> 
 
    <div class="message_box"> 
 
    </div> 
 
    <div class="user_info"> 
 

 
    <input name="shout_message" id="shout_message" type="text" placeholder="Type Message Hit Enter" maxlength="100" /> 
 
    </div> 
 
    </div> 
 
</div> 
 
<script src="https://code.jquery.com/jquery-3.1.0.js"></script> \t 
 
</body> 
 
</html>

당신이 상태를 지속하여 무엇을 의미 않았다 당신이 설명 할 수 위의 조각 https://jsbin.com/hewataz/edit?html,js,output

+0

감사합니다! 매력처럼 작동합니다. –

1

지적했듯이 쿠키를 사용하여 사용자 환경 설정을 저장할 수 있습니다. cookies

사용자가 버튼을 클릭하여 채팅을 전환하면 해당 환경 설정으로 쿠키가 설정됩니다. 그런 다음 페이지가로드되면 쿠키를 읽고 채팅 상자에 CSS를 설정합니다. 여기에 예제와 작업 바이올린 여기

https://fiddle.jshell.net/75nrozxd/1

<div class="shout_box"> 
    <div class="header">Shout Box 
    <div class="close_btn">Toggle</div> 
    </div> 
    <div class="toggle_chat"> 
    <div class="message_box"> 
    </div> 
    <div class="user_info"> 
     <input name="shout_message" id="shout_message" type="text" placeholder="Type Message Hit Enter" maxlength="100" /> 
    </div> 
    </div> 
</div> 

<script> 
var cookieValue = document.cookie.replace(/(?:(?:^|.*;\s*)chatCSS\s*\=\s*([^;]*).*$)|^.*$/, "$1"); 
console.log("Cookie Value is: " + cookieValue) 
$('.toggle_chat').css("display", cookieValue); 

//toggle hide/show shout box 
$(".close_btn").click(function(e) { 
    //get CSS display state of .toggle_chat element 
    //toggle show/hide chat box 
    $('.toggle_chat').slideToggle(function() { 
    var toggleState = $('.toggle_chat').css('display'); 
    document.cookie = "chatCSS=" + toggleState; 
    //use toggleState var to change close/open icon image 
    if (toggleState == 'block') { 
     $(".header div").attr('class', 'open_btn'); 
    } else { 
     $(".header div").attr('class', 'close_btn'); 
    } 
    }); 
}); 
</script> 
+0

은 매력처럼 작동합니다. 감사합니다!! –

관련 문제