>웹 프론트엔드 >H5 튜토리얼 >HTML5 _html5 튜토리얼 기술로 애니메이션 효과를 얻는 방법 요약

HTML5 _html5 튜토리얼 기술로 애니메이션 효과를 얻는 방법 요약

WBOY
WBOY원래의
2016-05-16 15:45:591630검색

편집자는 움직이는 자동차를 예로 들어 HTML5 애니메이션을 구현하는 세 가지 방법을 설명합니다. 애니메이션은 캔버스뿐만 아니라 CSS3 및 자바스크립트도 합리적인 선택을 통해 최적의 구현을 달성할 수 있습니다.

PS: 그래픽 카드, 녹화 프레임 간격 및 컴퓨터 프로세서로 인해 재생 프로세스가 약간 부드럽지 않거나 왜곡될 수 있습니다!
세 가지 방법으로 구현할 수 있습니다.
(1) JS와 결합된 캔버스 요소
(2) 순수 CSS3 애니메이션(IE 등 일부 주류 브라우저에서는 지원되지 않음)
(3) Jquery와 결합된 CSS3
CSS3 애니메이션을 사용하는 방법을 아는 것이 <canvas> 요소를 사용하는 방법을 아는 것보다 더 중요합니다. 왜냐하면 브라우저는 이러한 요소(일반적으로 해당 스타일)의 성능을 최적화할 수 있기 때문입니다. , CSS와 같은) 그러나 캔버스를 사용하여 그림을 사용자 정의하는 데 사용하는 효과는 최적화할 수 없습니다. 그 이유는 브라우저가 사용하는 하드웨어가 주로 그래픽 카드의 성능에 달려 있기 때문입니다. 현재 브라우저는 그래픽 카드에 대한 직접 액세스를 제공하지 않습니다. 예를 들어 모든 그리기 작업은 먼저 브라우저에서 특정 기능을 호출해야 합니다.
1.canvas
html 코드:

코드 복사
코드는 다음과 같습니다.


title>캔버스 요소


귀하의 브라우저는 <canvas>-요소를 지원하지 않습니다. 브라우저 업데이트를 고려해 보세요!





< ;/본문> ;



js 코드:

일부 변수 정의:


코드 복사코드
var dx=5, //현재 속도
rate=1, //현재 재생 속도
ani, //현재 애니메이션 루프
c, / /드로잉( 캔버스 컨텍스트)
w, //자동차 [숨김](캔버스 컨텍스트)
grassHeight=130, //배경 높이
carAlpha=0, //타이어 회전 각도
carX=- 400 , //자동차의 x축 방향 위치(변경 예정)
carY=300, //자동차의 y축 방향 위치(일정 유지)
carWidth= 400, //차 폭
carHeight=130, //차 높이
tiresDelta=15, //한 타이어에서 가장 가까운 자동차 섀시까지의 거리
axisDelta=20, / /자동차 하부 섀시 축과 타이어 사이의 거리
radius=60 //타이어 반경


자동차 캔버스(처음에는 숨겨져 있음)를 인스턴스화하기 위해 다음과 같은 자체 실행 익명 함수를 사용합니다.



코드 복사 코드는 다음과 같습니다.
(function(){
var car=document.createElement('canvas'); //요소 생성
car.height=carHeight axisDelta 반경; //높이 설정
w=car.getContext('2d')



"재생" 버튼을 클릭하면 "자동차 그리기" 작업을 일정한 간격으로 반복적으로 실행하여 "프레임 재생" 기능을 시뮬레이션할 수 있습니다.



코드 복사

코드는 다음과 같습니다.function play(s){ //매개변수 s는 버튼입니다.
if(ani){ //If ani null이 아니며 우리를 나타냅니다. 이미 애니메이션이 있습니다.
clearInterval(ani); //그래서 이를 지워야 합니다(애니메이션 중지)
ani=null
s.innerHTML='Play' ; //버튼 이름을 "Play"로 바꿉니다.
}else{
ani=setInterval(drawCanvas,40) //애니메이션을 25fps[초당 프레임], 40/1000으로 설정합니다. -twenty-fifth
s.innerHTML='Pause'; //버튼 이름을 "Pause"로 변경합니다.
}
}



가감속은 다음과 같은 방법으로 이동 거리를 변경하여 이루어집니다.



코드 복사

코드 다음과 같습니다:

함수 속도(델타){
var newRate=Math.max(rate delta,0.1)
dx=newRate/rate*dx;
rate=newRate;
페이지 로딩 초기화 방법:
//init
function init(){
c=document.getElementById('canvas').getContext('2d')
drawCanvas() ;
}

주요 방법 :



코드 복사코드는 다음과 같습니다.
function drawCanvas (){
c.clearRect(0,0,c.canvas.width, c.canvas.height); //오류를 방지하기 위해 캔버스(표시됨)를 지웁니다.
c.save() / /유사한 "푸시" 작업에 해당하는 현재 좌표값 및 상태 저장
drawGrass(); //배경 그리기
c.translate(carX,0) //시작점 좌표 이동
drawCar(); //자동차 그리기(숨겨진 캔버스)
c.drawImage(w.canvas,0,carY) //마지막으로 표시되는 자동차 그리기
c.restore() / /캔버스의 상태를 복원합니다. 이는 "팝" 작업과 유사합니다
carX =dx; //앞으로 걷기를 시뮬레이션하기 위해 X축 방향으로 자동차의 위치를 ​​재설정합니다
carAlpha =dx/ radius; //타이어 각도를 비례적으로 늘립니다.
if (carX>c.canvas.width){ //일부 일반적인 경계 조건을 설정합니다.
carX=-carWidth-10; //속도를 dx로 바꿀 수도 있습니다. *=-1;
}
}

배경 그리기:



코드 복사코드는 다음과 같습니다.
function drawGrass( ){
//처음 두 매개변수는 그라데이션 시작점의 좌표이고, 마지막 두 매개변수는 그라데이션 끝점의 좌표입니다.
var grad=c. createLinearGradient(0,c.canvas.height-grassHeight,0 ,c.canvas.height);
//선형 그래디언트의 그래디언트 색상을 지정합니다. 0은 그래디언트 시작 색상을 나타내고, 1은 그래디언트 종료 색상을 나타냅니다.
grad.addColorStop(0,'#33CC00');
grad.addColorStop(1,'#66FF22')
c.fillStyle=grad;
c.lineWidth=0; .fillRect(0,c.canvas.height-grassHeight,c.canvas .width,grassHeight)
}


차체 그리기:



코드 복사 코드는 다음과 같습니다.
function drawCar( ){
w.clearRect(0,0,w.canvas.width,w.canvas.height); //숨겨진 아트보드 지우기
w.StrokeStyle='#FF6600'; //테두리 색상 설정
w.lineWidth=2; //테두리 너비 설정(픽셀 단위)
w.fillStyle='#FF9900'; //채우기 색상 설정
w.beginPath( ); //새 경로 그리기 시작
w.lect(0,0,carWidth,carHeight); //직사각형 그리기
w.strok() //테두리 그리기
w.fill (); //배경 채우기
w.closePath(); //새 경로 닫기
drawTire(tiresDelta radius,carHeight axisDelta) //첫 번째 바퀴 그리기 시작
drawTire(carWidth -tiresDelta-radius,carHeight axisDelta) / /마찬가지로 두 번째
}


타이어 그리기:



코드 복사코드는 다음과 같습니다.
function drawTire( x,y){
w.save();
w.translate(x,y)
w.rotate(carAlpha)
w.StrokeStyle='#3300FF' ;
w.lineWidth=1;
w.fillStyle='#0099FF';
w.beginPath()
w.arc(0,0,radius,0,2*Math. PI,false );
w.closePath();
w.beginPath()
w.lineTo (-radius ,0);
w.closePath();
w.moveTo(0,radius); .lineTo( 0,-radius);
w.closePath()
w.restore()



원리는 간단하고 자세한 설명은 코드에서 하기 때문에 여기서는 일일이 설명하지 않겠습니다!


2.CSS3


단일 JS 코드 없이 위와 동일한 애니메이션 효과를 완전히 달성한 것을 확인할 수 있습니다.
HTML 코드:



코드를 복사하세요

코드는 다음과 같습니다





CSS3 애니메이션을 사용한 애니메이션



섀시">



< div class="vr">


>








CSS 코드 :
본문
{
패딩:0;
여백:0
}




코드 복사

코드는 다음과 같습니다.

/*애니메이션 정의: -400px 위치에서 1600px 위치로 이동*/
@keyframes carAnimation
{
0% { left:-400px } /* 초기 위치 지정 , 0%는 from*/
100% { left:1600px } /* 최종 위치를 지정하고, 100%는 다음과 같습니다.*/
}
/* Safari 및 Chrome */
@ -webkit-keyframes carAnimation
{
0% {왼쪽:-400px; }
100% {왼쪽:1600px; }
}
/* Firefox */
@ -moz -keyframes carAnimation
{
0% {left:-400; }
100% {left:1600px; }
}
/*IE는 아직 이 정의를 지원하지 않습니다. IE10*/
@-ms-keyframes carAnimation
{
0% {left:-400px }
100%{left:1600px }
} @keyframes용입니다. tyreAnimation
{
0% {변형: 회전(0) }
100% {변형: 회전(1800deg) }
}
@-webkit-keyframes tyreAnimation

0% { -webkit-transform: 회전(0) }
100% { -webkit-transform: 회전(1800deg) }
}
@-moz-keyframes tyreAnimation
{
0% { -moz-transform: 회전(0) }
100% { -moz-transform: 회전(1800deg) }
}
@-ms-keyframes tyreAnimation
{
0% { -ms-transform: 회전(0) }
100% { -ms-transform: 회전(1800deg) }
} #container
{
위치 :relative;
너비:100%;
높이:600px;
overflow:hidden; /*매우 중요*/
}
#car
{
위치 :absolute; / *자동차는 컨테이너 안에 절대적으로 위치합니다*/
width:400px
height:210px /*타이어와 섀시를 포함한 자동차의 전체 높이*/
z-index; :1; /*자동차를 배경 위에 놓으세요*/
top:300px; /*위쪽에서 거리(y축)*/
left:50px; /*왼쪽에서 거리(x축)* /
/* 다음 콘텐츠는 요소에 사전 정의된 애니메이션 및 관련 속성을 제공합니다*/
-webkit-animation-name:carAnimation /*name*/
-webkit-animation-duration:10s; 기간*/
-webkit-animation-iteration-count:infinite; /*반복 횟수-무한*/
-webkit-animation-timing-function:linear /*처음부터 같은 속도로 애니메이션 재생 종료* /
-moz-animation-name:carAnimation; /*name*/
-moz-animation-duration:10s; /*duration*/
-moz-animation-iteration-count: 무한; /*반복 횟수 - 무제한*/
-moz-animation-timing-function:linear; /*처음부터 끝까지 같은 속도로 애니메이션 재생*/
-ms-animation-name:carAnimation; ; /*이름*/
-ms-animation-duration:10s; /*기간*/
-ms-animation-iteration-count:infinite; /*반복 횟수-무한*/
- ms-animation-timing-function:linear; /* 처음부터 끝까지 같은 속도로 애니메이션 재생*/
animation-name:carAnimation /*Name*/
animation-duration:10s; */
animation-iteration-count:infinite; /*반복 횟수-무한*/
animation-timing-function:linear; /*처음부터 끝까지 같은 속도로 애니메이션 재생*/
}
/*body*/
#chassis
{
위치:절대;
너비:400px
배경:#FF9900; border: 2px solid #FF6600;
}
/*Tire*/
.tire
{
z-index:1; /*위와 마찬가지로 타이어도 위의 배경*/
위치:절대값:
border-radius:60px; /*원 반경*/
height:120px;
너비:120px; /* 2*반경=너비 */
배경:#0099FF /*채우기 색상*/
테두리:1px 솔리드 #3300FF
-webkit-animation-name: tyreAnimation ;
-webkit-animation-duration:10s;
-webkit-animation-iteration-count:infinite;
-moz-animation- 이름 :tyreAnimation
-moz-animation-duration:10s;
-moz-animation-iteration-count:infinite
-moz-animation-timing-function:linear; animation -name:tyreAnimation;
-ms-animation-duration:10s;
-ms-animation-iteration-count:infinite
-ms-animation-timing-function:linear; - 이름:tyreAnimation;
animation-duration:10s;
animation-timing-function:linear;
#fronttire
🎜 >right:20px; /*오른쪽 타이어와 가장자리 사이의 거리를 20으로 설정*/
}
#backtire
{
left:20px; 타이어 및 가장자리를 20으로 설정*/
}
#grass
{
position:absolute; /*배경은 컨테이너에 절대적으로 위치합니다*/
width:100%; >height:130px;
bottom:0; 하단은 그라디언트의 시작점을 나타내며, 첫 번째 색상 값은 그라디언트의 시작 값입니다. 종료 값입니다*/
background:linear-grdaient(bottom,#33CC00,#66FF22)
background:-webkit-linear-gradient(bottom,#33CC00,#66FF22)
background: -moz-linear-gradient(하단, #33CC00,#66FF22);
배경:-ms-linear-gradient(하단,#33CC00,#66FF22)
}
.hr,.vr
{
위치:절대 ;
배경:#3300FF
}
.hr
{
폭:1px; /*가로선 타이어*/
왼쪽:0
상단:60px
}
.vr
{
너비:1px;
높이:100%; /*타이어 수직선*/
왼쪽:60px;
위쪽:0; >

3.JQuery 및 CSS3

이 방법은 효과와 호환성이 좋은 방법입니다(특히 IE9에서는 아직 CSS3를 지원하지 않기 때문에) HTML 코드( CSS3의 HTML 코드와 다르지 않습니다):



코드 복사

코드는 다음과 같습니다.
CSS3 애니메이션을 사용한 애니메이션< /title> <br></head> <br><div id="container"> <br><div id="섀시"></div> <br><div id="backtire" class="tire"> <br><div class="hr"></div> >< div class="vr"></div> <br></div> <br><div id="fronttire" class="tire"> "hr" </div> <br><div class="vr"></div> <br></div> id="잔디"></div> <br><footer></footer> <br></html> >CSS: <br><style> <br>body <br>{ <br>padding:0; <br>margin:0 <br>} <br>#container <br>{ <br>위치: 상대; <br>폭:100%; <br>높이:600px; <br>overflow:hidden; /*매우 중요*/ <br>} <br>#car <br>{ <br>위치: 절대; /* 자동차는 컨테이너에 절대적으로 위치합니다*/ <br>width:400px; <br>height:210px /*타이어와 섀시를 포함한 자동차의 전체 높이*/ <br>z-index: 1; /*자동차를 배경 위에 두세요*/ <br>top:300px /*상단으로부터의 거리(y축)*/ <br>left:50px; /*왼쪽으로부터의 거리(x- 축)*/ <br>} <br>/*본체*/ <br>#chassis <br>{ <br>위치:절대 <br>너비:400px <br>높이 <br>배경 :#FF9900; <br>테두리: 2px 솔리드 #FF6600; <br>} <br>/*tire*/ <br>.tire <br>{ <br>z-index:1; 타이어는 배경 위에도 배치되어야 합니다*/ <br>position:absolute; <br>bottom:0 <br>border-radius:60px; /*circle radius*/ <br>height:120px; *반경=높이 */ <br>너비:120px; /* 2*반지름=너비 */ <br>배경:#0099FF /*채우기 색상*/ <br>테두리:1px 솔리드 <br>- o-transform:rotate(0deg); /*회전(단위: 도)*/ <br>-ms-transform:rotate(0deg) <br>-webkit-transform:rotate(0deg); -transform:rotate(0deg); <br>} <br>#fronttire <br>{ <br>right:20px; /*오른쪽 타이어와 가장자리 사이의 거리를 20으로 설정*/ <br>} <br>#backtire <br>{ <br>left:20px; / *왼쪽 타이어와 가장자리 사이의 거리를 20으로 설정*/ <br>} <br>#grass <br>{ <br>position:absolute; /*배경은 컨테이너에 절대적으로 위치합니다.*/ <br>width:100% ; <br>height:130px; <br>bottom:0;/*배경색은 선형 그라데이션을 나타냅니다. 그라디언트의 시작점에서 첫 번째 색상 값은 그라디언트의 시작 값이고, 두 번째 색상 값은 최종 값입니다*/ <br> background:linear-grdaient(bottom,#33CC00,#66FF22) <br> background:-webkit-linear-gradient(하단,#33CC00,#66FF22) <br>배경 :-moz-linear-gradient(하단,#33CC00,#66FF22) <br>배경:-ms-linear-gradient (하단,#33CC00,#66FF22); <br>} <br>.hr,.vr <br>{ <br>위치:절대 <br>배경:#3300FF <br>.hr; <br>{ <br>높이:1px; <br>폭:100%; /*가로선 */ <br>왼쪽:0 <br>상단:60px; <br>.vr >{ <br>너비:1px; <br>높이:100%; 🎜><br><br> <br><br>JS 코드: <br><br>먼저 온라인 API 소개: <br><br><br><br><br><br>코드 복사<br><br><br> 코드는 다음과 같습니다:<br><br><br><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></ 스크립트> <br><br><br> <br>애니메이션 코드 구현(매우 간결함): <br> </div> <p><strong><br>코드 복사</strong><br><br>코드는 다음과 같습니다.</p> <div class="msgheader"> <div class="msgborder" id="phpcode29"> <br><script> <br>$(function(){ <br>var rot=0; <br>var prefix=$('.tire').css('-o-transform') ?'-o-transform':($('.tire').css('-ms-transform')?'-ms-transform':($('.tire').css('-moz-transform ')?'-moz-transform':($('.tire').css('-webkit-transform')?'-webkit-transform':'transform'))) <br>var Origin={ /*시작점 설정*/ <br>left:-400 <br>}; <br>var animation={ /*애니메이션은 jQuery에 의해 수행됩니다*/ <br>left:1600 /*우리가 수행할 위치를 설정합니다. 최종 위치로 이동*/ <br>}; <br>varrotate=function(){ /*이 메서드는 회전된 휠에 의해 호출됩니다*/ <br>rot =2$('.tire ').css(prefix,'rotate(' rot 'deg)'); <br>}; <br>var options={ /*jQuery에서 사용할 매개변수*/ <br>easing:'linear', / *속도 지정, 여기서는 선형, 즉 균일한 속도입니다*/ <br>duration:10000, /*애니메이션 기간 지정*/ <br>complete:function(){ <br>$('#car') .css(origin) .animate(animation,options); <br>단계:회전 <br>}; <br>options.complete() <br></ 스크립트> <br> <br><br> <br>간단한 설명: 접두사는 먼저 현재 사용되는 정의(-o?-moz?-webkit?-ms?)를 식별한 다음 애니메이션의 시작 위치와 끝 위치를 정의합니다. 다음으로 회전 각도를 설정하는 함수가 정의됩니다(이 함수는 애니메이션의 각 단계에서 실행됩니다). 그런 다음 무한 자체 루프 호출이 발생하는 방식으로 애니메이션이 정의됩니다! </div>이 기사에서는 간단한 애니메이션 예를 통해 HTML5에서 애니메이션을 구현하는 몇 가지 일반적인 방법을 보여줍니다. <p></p> </div></span> </div></div></span></div></div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>성명:</span><div>본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.</div></div></div><div class="nphpSytBox"><span>이전 기사:<a class="dBlack" title="HTML5의 몇 가지 새로운 기능과 Canvas_html5 튜토리얼 기술의 공통 속성을 정리합니다." href="https://m.php.cn/ko/faq/5654.html">HTML5의 몇 가지 새로운 기능과 Canvas_html5 튜토리얼 기술의 공통 속성을 정리합니다.</a></span><span>다음 기사:<a class="dBlack" title="HTML5의 몇 가지 새로운 기능과 Canvas_html5 튜토리얼 기술의 공통 속성을 정리합니다." href="https://m.php.cn/ko/faq/5656.html">HTML5의 몇 가지 새로운 기능과 Canvas_html5 튜토리얼 기술의 공통 속성을 정리합니다.</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>관련 기사</h2><em><a href="https://m.php.cn/ko/article.html" class="bBlack"><i>더보기</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ko/faq/348281.html" title="AlloyTouch 전체 화면 스크롤 플러그인으로 30초 만에 부드러운 H5 페이지 생성" class="aBlack">AlloyTouch 전체 화면 스크롤 플러그인으로 30초 만에 부드러운 H5 페이지 생성</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/348372.html" title="HTML5 실제 전투 및 터치 이벤트 분석(touchstart, touchmove 및 touchend)" class="aBlack">HTML5 실제 전투 및 터치 이벤트 분석(touchstart, touchmove 및 touchend)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/348373.html" title="HTML5 Canvas 9의 이미지 그리기 예제에 대한 자세한 설명" class="aBlack">HTML5 Canvas 9의 이미지 그리기 예제에 대한 자세한 설명</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/348374.html" title="정규 표현식과 새로운 HTML5 요소" class="aBlack">정규 표현식과 새로운 HTML5 요소</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/348469.html" title="NodeJS와 HTML5를 결합하여 여러 파일을 끌어서 놓아 서버에 업로드하는 방법" class="aBlack">NodeJS와 HTML5를 결합하여 여러 파일을 끌어서 놓아 서버에 업로드하는 방법</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!</p></div><div class="footermid"><a href="https://m.php.cn/ko/about/us.html">회사 소개</a><a href="https://m.php.cn/ko/about/disclaimer.html">부인 성명</a><a href="https://m.php.cn/ko/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>