javascript - 在调整浏览器窗口大小时按住背景图像
问题描述
我正在尝试使用 HTML、CSS 和 Javascript 制作轮盘游戏。
我在调整浏览器窗口大小时遇到问题。
链接:https ://jsfiddle.net/5wrfzbaj/3/
背景图像随着它移动,并且因为显示了那条线。当轮盘赌停止时,它显示不同的颜色取决于您的浏览器大小。
我希望背景图像与获胜线“固定”,但我真的不知道该怎么做。
HTML:
<main>
<h1>Rulette</h1>
<div class="rolling-area">
<div class="rolling-indicator"></div>
<div class="rolling-box"></div>
</div>
</main>
<script src="roll.js"></script>
CSS:
* {
box-sizing: border-box;
}
h1{
margin-top: 100px;
text-align: center;
}
.rolling-area{
width: 100%;
margin: auto;
border: 1px solid rgb(0,0,0,.5);
position: relative;
margin-top: 50px;
padding: 10px;
}
.rolling-box {
width: 100%;
height: 100px;
background-image: url(https://i.imgur.com/P0oti92.png);
background-repeat: repeat-x;
background-size: auto 100px;
background-position: 520px;
transition: 8s;
}
.rolling-indicator{
position: absolute;
background-color: rgb(0,0,0,.5);
width: 3px;
left: 50%;
top: -15px;
height: calc(100% + 30px);
}
JavaScript:
let startingPosition = "520px";
let randomPosition;
let minimumPosition = 2000;
//Roll the rulette
function roll() {
console.log("Rolling!");
randomPosition = Math.floor(Math.random() * 15000 + minimumPosition);
console.log(randomPosition);
document.querySelector(".rolling-box").setAttribute("style", "background-position: " + randomPosition + "px center;");
}
// Restart the rulette to standart position
function positionZero() {
document.querySelector(".rolling-box").setAttribute("style", "background-position: 2000px center;" + " transition: 0s;");
console.log("Zero");
setTimeout(positionStandrad, 1);
}
function positionStandrad() {
document.querySelector(".rolling-box").setAttribute("style", "background-position: " + startingPosition + " center; transition: 1s ease-out;");
console.log("Standar");
}
//setInterval(roll, 1000);
解决方案
这可以通过将background-position
属性更改为使用百分比值 (50%) 而不是像素 (520px) 来完成。对于偏移量,您可以使用calc
函数:background-position: calc(50% + 2000px);
.
结果:https ://jsfiddle.net/sLfyerd7/1/
其他变化:
- 改为
startingPosition
数字而不是字符串 - 存储对“.rolling-box”的引用,而不是在每个函数中查找它
- 用来
elem.style.backgroundPosition
代替elem.setAttribute('style', 'background-position: ...')
推荐阅读
- python-3.x - 带有插件“从电子表格创建点层”的 Python 代码
- lisp - 如何在 Common Lisp 中创建双向二进制流?
- javascript - 如何为具有不同价值道具的不同路线渲染相同的反应组件?
- python - 如何使用python通过重复加法进行乘法?
- gradle - java.lang.IllegalArgumentException Corda-tranning Repository with Kotlin
- django - mod_wsgi 错误:ModuleNotFoundError:没有名为“django”的模块
- javascript - NPM React-router 版本太高级?
- dialogflow-es - 在 Dialogflow 中使用 sys.date 参数的 .recent 属性时出现问题
- ruby - 如何向 Mongoid::Criteria 添加类方法?
- angular - 获取 cdkDropList 中项目的放置位置