javascript - 使用画布或 html、css 跨越任何设备并位于中心
问题描述
我正在使用 JavaScript 和 JQuery 制作一个应用程序,它会告诉用户设备是否是直的,基本上就像一个水平仪。我想在屏幕中间画一条直线,并且无论设备的大小如何,我都希望它能够响应。这将用于手机和平板电脑。我用画布画了一条线,到目前为止我不确定这是否是解决这个问题的正确方法?
如果有人能给我任何建议,我将不胜感激。到目前为止,下面是我的画布线。我已经包含了一些我的意思的粗略图。
const c = document.getElementById("LineCanvas");
const drw = c.getContext("2d");
drw.beginPath();
drw.moveTo(10,45);
drw.lineTo(180,47);
drw.lineWidth = 5;
drw.strokeStyle = '#006400';
drw.stroke();
解决方案
要绘制线条,您可以使用伪元素HTML
或body
您想在特定页面中使用的任何特定标签或单击,然后通过transform:rotate() ;
或更新旋转rotate3D()
示例(如果没有 javascript,则必须通过您的应用从您的设备获取旋转值):
let level = document.querySelector("#level");
document.querySelector("#spirit").onclick = function() {
level.classList.toggle('show');
}
#level {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
display: none;
pointer-events: none;
}
#level.show {
display: block;
}
#level::before {
content: '';
position: absolute;
width: 200vmax;
margin: 0 -50vmax;
border-top: 1px solid;
box-shadow: 0 0 1px 5px #bee;
top: 50%;
transform: rotate(0deg);
}
#level.show~#spirit::before {
content: 'Hide';
}
#level:not(.show)~#spirit::before {
content: 'Show';
}
/* animation to fake phone device moving */
#level::before {
animation: rt 10s infinite;
}
@keyframes rt {
20% {
transform: rotate3d(1, -1, 1, -0.25turn);
}
40% {
transform: rotate3d(1, 1, 1, 0.5turn);
}
60% {
transform: rotate3d(1, -1, 1, -0.75turn);
}
80% {
transform: rotate3d(1, 1, -1, -0.5turn);
}
}
<div id="level">
<!-- to show on a single page or via js on user request -->
</div>
<button id="spirit" type=button> that spirit level</button>
推荐阅读
- python - 如何根据水平线分割图像?
- spring-boot - 如果注解为@Transactional 的方法究竟会回滚什么?
- angular - 在 Angular 和 ionic 中导入 javascript 库
- .htaccess - htacccess 重定向到单独的文件夹
- proof - 伊德里斯:证明一些矛盾的案例
- java - Appium IOS Native app 按标签查找元素
- php - 如果日期与我的会话日期匹配,我想插入函数调用
- c# - 如何使用 Sitecore Api 更改项目的模板 ID ..?? 注意 - 仅使用 sitecore api
- amazon-web-services - Auto Scaling 启动新实例时自动更新 Route 53
- tfs - 如何构建仅签入代码文件以及如何仅签入该构建的 tfs 中的代码工件?