手机上如何让页面强制横屏

时间:2021-03-12 03:20:07 相术

首先准备一段html内容:

  >
	>
	>
	<div >
	id>
	>
	=>
	"content>
	">
	>
    >
	>
	>
	<p>
	>谁说html5不能横屏的。。。>
	>
	>
	p>
	>
    >
	>
	>
	<p>
	>我就是要横屏。。。>
	>
	>
	p>
	>
    >
	>
	>
	<p>
	>要横屏。。。>
	>
	>
	p>
	>
    >
	>
	>
	<p>
	>横屏。。。>
	>
	>
	p>
	>
    >
	>
	>
	<p>
	>屏。。。>
	>
	>
	p>
	>
    >
	>
	>
	<p>
	>图片也是可以的。>
	>
	>
	<img >
	src>
	>
	=>
	"http://img001.photo.21cn.com/photos/album/20120904/o/6A7A403C29766CBCB38C616BDFD48486.jpg>
	" >
	/>>
	>
	>
	p>
	>
  >
	>
	>
	div>
	>

其实原理很简单,只需要把内容向右旋转90度就变成了横屏啊。先把定位修改为absolute:

    >
	#content >
	{
      >
	position>
	: absolute>
	;
      >
	top>
	: 0>
	;
      >
	left>
	: 0>
	;
      >
	width>
	: 100%>
	;
      >
	height>
	: 100%>
	;
    >
	}
    >
	#content p >
	{
      >
	margin>
	: auto>
	;
      >
	margin-top>
	: 20px>
	;
      >
	text-align>
	: center>
	;
    >
	}
    >
	img >
	{
      >
	width>
	: 100px>
	;
    >
	}

其实除了position: absolute;这行代码其他都是不必要的手机不自动横屏看相片,其他只是为了做一些居中对齐等。然后我们用js判断是竖屏(portrait)还是横屏(landscape),如果是竖屏,向右旋转90度。

  >
	const width >
	= document>
	.documentElement>
	.clientWidth>
	;
  >
	const height >
	= document>
	.documentElement>
	.clientHeight>
	;
  >
	if >
	(width >
	< height>
	) >
	{
    console>
	.>
	log>
	(width >
	+ >
	" " >
	+ height>
	)>
	;
    >
	const contentDOM >
	= document>
	.>
	getElementById>
	(>
	'content'>
	)>
	;
    contentDOM>
	.style>
	.width >
	= height >
	+ >
	'px'>
	;
    contentDOM>
	.style>
	.height >
	= width >
	+ >
	'px'>
	;
    contentDOM>
	.style>
	.top >
	= >
	(height >
	- width>
	) >
	/ >
	2 >
	+ >
	'px'>
	;
    contentDOM>
	.style>
	.left >
	= >
	0 >
	- >
	(height >
	- width>
	) >
	/ >
	2 >
	+ >
	'px'>
	;
    contentDOM>
	.style>
	.transform >
	= >
	'rotate(90deg)'>
	;
  >
	}

但是如果用户的屏幕旋转按钮开着,然后用户又把手机横过来,就悲剧了手机不自动横屏看相片,如下图。

所以我们还需要**屏幕变化,如果用户自己把屏幕横过来,就把之前的旋转去掉。

  >
	const evt >
	= >
	"onorientationchange" >
	in window >
	? >
	"orientationchange" >
	: >
	"resize">
	;
  window>
	.>
	addEventListener>
	(evt>
	, >
	function >
	(>
	) >
	{
    >
	const width >
	= document>
	.documentElement>
	.clientWidth>
	;
    >
	const height >
	= document>
	.documentElement>
	.clientHeight>
	;
    >
	const contentDOM >
	= document>
	.>
	getElementById>
	(>
	'content'>
	)>
	;
    >
	alert>
	(>
	'width: ' >
	+ width >
	+ >
	' height: ' >
	+ height>
	)
    >
	if >
	(width >
	> height>
	) >
	{ >
	// 横屏
      contentDOM>
	.style>
	.width >
	= width >
	+ >
	'px'>
	;
      contentDOM>
	.style>
	.height >
	= height >
	+ >
	'px'>
	;
      contentDOM>
	.style>
	.top >
	= >
	'0px'>
	;
      contentDOM>
	.style>
	.left >
	= >
	'0px'>
	;
      contentDOM>
	.style>
	.transform >
	= >
	'none'>
	;
    >
	}
    >
	else >
	{ >
	// 竖屏,这里微信应该由bug,我切换为竖屏的时候,width:375, height: 323, 导致不能旋转角度。 在safari、chrome上是正确的。
      >
	alert>
	(>
	'change to portrait'>
	)
      contentDOM>
	.style>
	.width >
	= height >
	+ >
	'px'>
	;
      contentDOM>
	.style>
	.height >
	= width >
	+ >
	'px'>
	;
      contentDOM>
	.style>
	.top >
	= >
	(height >
	- width>
	) >
	/ >
	2 >
	+ >
	'px'>
	;
      contentDOM>
	.style>
	.left >
	= >
	0 >
	- >
	(height >
	- width>
	) >
	/ >
	2 >
	+ >
	'px'>
	;
      contentDOM>
	.style>
	.transform >
	= >
	'rotate(90deg)'>
	;
    >
	}
  >
	}>
	, >
	false>
	)>
	;

完整的Demo请看这里。

读过此篇文章的网友还读过: