javascript - 拖动全景bg图像并对指南针箭头产生影响
问题描述
当我将背景图像向左或向右拖动时,也会对旋转 360 度的指南针图标产生影响。它在第一个周期工作(有点)。但不是在第二个或第三个等等。在第一个循环罗盘之后增加了一个新的差距。所以 0 到 360 不匹配。拖动循环没有在它开始的地方结束。
我想我错过了计算旋转罗盘图标的功能:
function setDegree(){
const x = getCssData()
const d = (360 / 5000) // 5000 is actual background image size.
const r = (x - def.value) * d * -1;
compass.value.style.transform = "rotate(" + r + "deg)"
}
为了更好地理解我做了一个沙箱。
PS:我将背景图片和 compass.svg 上传到 assets 文件夹,但沙箱没有显示。仍在尝试修复图像路径...
解决方案
问题是您没有考虑图像的缩放比例。
因为您正在使用分配比例,所以实际宽度是未知的。
background-size: auto 100%;
虽然无法提供简单可靠的解决方案来将其添加到您的脚本中,但这可能需要更多重组
你可以试试这个,它将使用计算出的高度来推断宽度(w
)
您只需要创建一个ref
const imgRef = ref()
并将其传递给父级<div id="panorama" ref="imgRef" ...
function setDegree() {
let w = Number(getComputedStyle(imgRef.value).height.replace("px", ""))/650*5000;
const x = getCssData();
const d = 360 / w;
const r = (x - def.value) * d * -1;
compass.value.style.transform = "rotate(" + r + "deg)";
}
阿洛斯注意到
- 您可以将您的资产文件夹移至公共文件夹并使用
/assets/...
- 为了更好的用户体验,将 mouseUp 处理程序放入
window.addEventListener("mouseup", mouseUpHandler);
设置中的窗口(然后在 onUnmounted 删除侦听器)
推荐阅读
- php - 使用 Guzzle 上传带有文件的数据 - Laravel
- reactjs - 为反应库配置汇总
- c# - 托管标识 - 如何在本地调试
- reactjs - React-Bootstrap v1 中的 Panel.Collapse
- android - 禁用 FRP 的用户帐户,仅允许工作管理帐户
- python - Python 3:删除文件中最后一个字符的惯用方法
- javascript - WebStorm diff 中一行上的黄色块是什么意思?
- ios - ios上的cordova cli命令失败:ENOENT cordova-config.json.SOME_NUMBER
- python - select appropriate dataframe based on user input
- c# - 无法将 lambda 表达式转换为类型“DbContextOptions
" 因为它不是委托类型