- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 deviceorientation
事件实现 compass 。我想使用旋转来旋转面向观察方向的箭头。我只是在 deviceorientation
发生变化时旋转图像。
在 iOS 上,通过执行以下操作,这就像魅力一样:
if (typeof DeviceOrientationEvent.requestPermission === "function") {
//@ts-ignore
DeviceOrientationEvent.requestPermission()
.then(permissionState => {
if (permissionState === "granted") {
this.compassActive = true;
window.addEventListener(
"deviceorientation",
eventData =>
this.zone.run(() => {
if(!this.compassActive){
return false;
}
//@ts-ignore
this.rotatePlayerIcon(eventData.webkitCompassHeading);
}),
false
);
}
})
.catch(console.error);
因为 DeviceOrientationEvent.webkitCompassHeading
为我提供了基于顺时针世界的设备旋转演示。
我在 Android 上尝试了相同的操作,但找不到基于世界的解决方案。 Android 上不存在 webkitCompassHeading
,因此我尝试仅使用 eventData.alpha
。但这给出的 0 是基于事件触发时的旋转,而不是基于世界北方。
我发现的所有指南似乎都已经过时了。
如何像在 iOS 上那样在 Android 上获得顺时针 compass ?
最佳答案
根据绝对 alpha、beta 和 gamma 计算 compass 航向的公式如下:
compass = -(alpha + beta * gamma / 90);
compass -= Math.floor(compass / 360) * 360; // Wrap to range [0,360]
上述公式对于 0 beta 和 gamma(例如,手机放在 table 上)来说表现良好,并且也适用于 beta=90(例如,直立放置)。
<小时/>现在已经是 2023 年了,iOS 仍然不支持绝对的 DeviceOrientationEvent,Android 仍然不直接支持 compass 。以下 TypeScript 代码展示了如何获取两种类型设备的 compass 值。您可以通过删除冒号后面的类型说明符将其转换为 JavaScript。
function startCompassListener(callback: (compass: number) => void) {
if (!window["DeviceOrientationEvent"]) {
console.warn("DeviceOrientation API not available");
return;
}
let absoluteListener = (e: DeviceOrientationEvent) => {
if (!e.absolute || e.alpha == null || e.beta == null || e.gamma == null)
return;
let compass = -(e.alpha + e.beta * e.gamma / 90);
compass -= Math.floor(compass / 360) * 360; // Wrap into range [0,360].
window.removeEventListener("deviceorientation", webkitListener);
callback(compass);
};
let webkitListener = (e) => {
let compass = e.webkitCompassHeading;
if (compass!=null && !isNaN(compass)) {
callback(compass);
window.removeEventListener("deviceorientationabsolute", absoluteListener);
}
}
function addListeners() {
// Add both listeners, and if either succeeds then remove the other one.
window.addEventListener("deviceorientationabsolute", absoluteListener);
window.addEventListener("deviceorientation", webkitListener);
}
if (typeof (DeviceOrientationEvent["requestPermission"]) === "function") {
DeviceOrientationEvent["requestPermission"]()
.then(response => {
if (response == "granted") {
addListeners();
} else
console.warn("Permission for DeviceMotionEvent not granted");
});
} else
addListeners();
}
测试时我发现我的 Android 的绝对值(alpha、beta、gamma)非常不准确(alpha 误差约 60 度)。然而,通过滚动设备,它可以自行校准,误差约为 5 度。
关于javascript - Android 设备方向 compass ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60624644/
我目前正在与 Middleman 合作建立一个新页面,但现在 image-url 助手似乎不起作用。 在我的 config.rb 我有: #Use relative URLs activate :
我正在尝试将 compass 构建包推送到 heroku 服务器,https://github.com/stephanmelzer/heroku-buildpack-nodejs-grunt-comp
我想在一个命令中编译/观看分布在多个文件夹中的 Compass/SCSS 文件。据我所知,没有办法配置多个 SCSS 文件夹,再加上单独的 CSS 输出文件夹。 add_import_path几乎是我
我们为 compass 中的不透明度和过渡提供了出色的 mixin,但是我如何才能对不透明度进行过渡呢? @include single-transition(opacity, 1s); 上面的行在不
我需要有一个特殊的 scss 文件,该文件对于项目的每个安装都不同,所以我不想将它包含在 git 存档中。但即使此文件不存在,一切都应该有效。 有没有办法@import scss 文件只在它存在时才忽
我开始在一个地方导入共享的东西,比如变量和 mixins——css list 文件。现在我正在使用文件的直接路径导入一些 Compass mixin。 我的问题是如果使用 @import 'compa
我想使用代码 here覆盖 linear-gradient Compass 自带的功能。我怎样才能做到这一点? 我想我需要的是一种导入 linear-gradient 的方法函数,然后在本地将其重命名
我有一个 SCSS 项目,它通过 Compass 建立在 Foundation 之上。它定义了一组 sass 变量,然后根据这些变量定义了一堆规则:(我的项目有更多的变量设置和导入语句;这被简化了。)
我们使用 Jenkins 作为我们的 CI 构建服务器,每次启动构建时,都会执行 compass clean,然后执行 compass compile。我们首先执行 compass clean,因为我
我正在尝试使用 susy 网格创建一个 compass 项目。 $ compass create --using susy test No such framework: "susy" 我在 Wind
使用 compass 创建 Sprite 时,screen.css 中主 Sprite 图像的路径出错,因此我看不到图像。 我的 scss 代码是 @import "compass"; @import
我刚刚按照说明安装了 Compass & Sass here . 我在运行 compass watch 时收到以下警告首次。究竟是什么意思?我应该怎么做才能修复它,我需要做什么吗? $ (master
正如标题所说。编译时间超过 50 秒是 Not Acceptable 。那么,有没有办法,比方说:一个带有 compass 魔法的单个(部分)文件(如 Sprite mixins 等),而其余文件则带
根据 this discussion , 在炼油厂 CMS 中使用 Compass 时需要炼油厂主题插件。但是refinery-theming's page说它不再是使用它的命令。无论如何在没有主题插
出于某种原因, compass 找不到我为 Sprite 设置的这个文件夹。这就是我的目录的样子。 Project media compass sass
我在现有站点上使用 Sass,并决定在 Win7x64 上启动并运行 Compass。 Ruby、HAML、Compass 都安装正常(afaik)。 我在 c:\project 有一个元素,其中的静
我目前正在从事一个使用 Sass 来编译我的样式表的元素。然而,我发现我想在我的 CSS 中做一些三 Angular 函数,因此转向 Compass 寻求支持。 为了使用 Compass 支持的三 A
所以我们有一个标准的 Compass CSS 项目,包含 sass 和 css 目录。作为一个场景,假设 .scss 文件名为 foo-all.scss。 是否有可能通过命令行或 config.rb
如果我将 compass 用于 CSS 并使用如下函数或 mixin: @include background-image(linear-gradient(#a3cce0, #fff)); 有没
我正在尝试使用 Netbeans 的 sass 插件,我的 .scss 文件需要 compass 库。它在命令行中运行良好: compass compile 但在 Netbeans IDE 中出现以下
我是一名优秀的程序员,十分优秀!