ajax 를 이용해서 head를 고정시키는 법
본문
초보 프런트 개발자입니다...
그누보드5에서는 head를 고정시킬 수가 없고 페이지를 이동할 때마다
head.php 와 head.sub.php를 불러오는 형식이더라구요...
head에다가 유튜브 iframe을 넣어두고 이걸 재생중인 상태를 유지하고 싶은데
css를 fixed를 사용하더라도 페이지 이동할 때마다 새롭게 리로드해서 그런지
head 부분이 새로고침이 되어서 계속 처음으로? 돌아가더라구요 ㅠㅠ
ajax로 사용하면 된다고 해서 사용법을 이것저것 해봤는데
head.sub.php에 들어가서 그런건지 ajax를 사용해봐도 똑같은 현상이 일어나고 있어서...ㅠㅠ
혹시 이걸 어떻게 고쳐야하는지 아시는 분 계실까요?
계신다면 부디 답변 남겨주시면 감사하겠습니다 ㅠㅠ
우선 코드는 이런 상태입니다...
head.sub.php
<?php
// 이 파일은 새로운 파일 생성시 반드시 포함되어야 함
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
check_site_auth($is_member);
$begin_time = get_microtime();
if (!isset($g5['title'])) {
$g5['title'] = $config['cf_title'];
$g5_head_title = $g5['title'];
}
else {
$g5_head_title = $g5['title']; // 상태바에 표시될 제목
$g5_head_title .= " | ".$config['cf_title'];
}
?>
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="imagetoolbar" content="no">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<?php
if($config['cf_add_meta'])
echo $config['cf_add_meta'].PHP_EOL;
?>
<title><?php echo $g5_head_title; ?></title>
<link rel="stylesheet" href="'.G5_ADMIN_URL.'/css/admin.css" type="text/css">
<link rel="stylesheet" href="'.G5_ADMIN_URL.'/css/admin.layout.css" type="text/css">
<!--[if lte IE 8]>
<script src="<?php echo G5_JS_URL ?>/html5.js"></script>
<![endif]-->
<script>
// 자바스크립트에서 사용하는 전역변수 선언
var g5_url = "<?php echo G5_URL ?>";
var g5_bbs_url = "<?php echo G5_BBS_URL ?>";
var g5_is_member = "<?php echo isset($is_member)?$is_member:''; ?>";
var g5_is_admin = "<?php echo isset($is_admin)?$is_admin:''; ?>";
var g5_is_mobile = "<?php echo G5_IS_MOBILE ?>";
var g5_bo_table = "<?php echo isset($bo_table)?$bo_table:''; ?>";
var g5_sca = "<?php echo isset($sca)?$sca:''; ?>";
var g5_editor = "<?php echo ($config['cf_editor'] && $board['bo_use_dhtml_editor'])?$config['cf_editor']:''; ?>";
var g5_cookie_domain = "<?php echo G5_COOKIE_DOMAIN ?>";
<?php if(defined('G5_IS_ADMIN')) { ?>
var g5_admin_url = "<?php echo G5_ADMIN_URL; ?>";
<?php } ?>
</script>
<script src="<?php echo G5_JS_URL ?>/jquery-1.8.3.min.js"></script>
<script src="<?php echo G5_JS_URL ?>/jquery.cookie.js"></script>
<script src="<?php echo G5_JS_URL ?>/common.js"></script>
<script src="<?php echo G5_JS_URL ?>/wrest.js?ver=<?php echo G5_JS_VER; ?>"></script>
<?php
if(!defined('G5_IS_ADMIN'))
echo $config['cf_add_script'];
?>
<style>
#bgm_box {
position: fixed;
top: 0;
left: 0;
width: 100%;
padding: 20px;
z-index: 9999;
}
</style>
</head>
<body>
<script>
$(document).ready(function() {
// Load initial content
loadContent('<?php echo G5_URL ?>/template.bgm.php');
// Load content on link click
$('a').click(function(e) {
e.preventDefault();
var url = $(this).attr('href');
loadContent(url);
});
// Function to load content
function loadContent(url) {
$('#bgm_box').html('Loading...');
$.ajax({
url: url,
success: function(data) {
$('#body').html(data);
}
});
}
});
</script>
<? if($config['cf_bgm']) { // 배경음악 출력부분 ?>
<div id="bgm_box">
<?php include_once(G5_PATH.'/template.bgm.php'); ?>
</div>
<? } ?>
답변 5
유튜브 api 중에는 getDuration() 이 있습니다.
이건 현재 동영상의 재생시간을 표현하는 것인데
이걸 자바스크립트의 로컬스토리지나 세션스토리지에 담아서
페이지가 바뀔 때 스토리지에 저장한 순간부터 동영상이 재생되도록 하면 됩니다만...
문...제...는... 유튜브의 경우 페이지가 바뀔 때마다 자동재생을 주기가 참 어렵다는데에 있습니다.
그래서 종국적으로는 미디어가 들어가는 부분과 아닌 부분을 분절하는 형태로 페이지 자체를 만들어야지 통으로 사용하면서 단순하게 코드 몇줄로 해결하는 방법은 없어 보입니다.
bgm 페이지가 레이아웃과 관련이 없다면 head에 넣는다고 생각하지 마시고
index에서 iframe을 사용해서 bgm페이지와 그누보드를 분리하시는 게 좋을 듯 보이네요.
페이지에서 미디어 재생을 유지해야 할경우
Ajax 방식으로 불러오거나 iframe 으로 구성하는 작업은 크게 의미가 없습니다.
재생을 시작한 시점부터 페이지가 리로드 안되도록 해야 합니다.
다음 두가지 방법 정도가 어느정도 솔루션이 될것 같습니다.
1. SPA(Single Page Application) 방식(React, ...)을 이용
2. frameset 방식으로 페이지를 나누어 처리(주소창의 url 고정)
ajax로 사용하면 된다고 해서 사용법을 이것저것 해봤는데
head.sub.php에 들어가서 그런건지
==>
ajax로 만든다는 것은 모든 페이지 내용들을 ajax로 불러와서 출력한다는 것이니
대대적인 수정이 필요한 복잡한 일입니다
head.sub에 넣어서 그런 것이 아니라
질문의 소스에서 ajax로 불러오는 내용(data)를 $('#body').html(data); <-- 이렇게 해버리면
body에 들어가는 bgm소스까지 바꾸어버리게 되니 안됩니다
다음처럼 ajaxpage div에 내용이 출력 되도록 만드세요
$('#ajaxpage').html(data);
data내용에는 head.sub, ,tailsub.php 가 들어가지 않게 만드세요
즉 보여줄 페이지 body내의 본문만 가져오도록 만드세요
<div id="bgm_box>
~~
<div>
<div id='ajaxpage'> index페이지 본문</div>