- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想改变 <main>
的颜色使用 wheel
的元素事件。如果event.deltaY
是负的,即向上滚动我想向后循环遍历数组,所以,如果 index = 2
它会变成蓝色、紫色、黑色、白色,然后一直到最后,太蓝了。如果event.deltaY
是正的,即向下滚动,我想向前循环数组,如果 index = 3
,它会变成蓝色、橙色、白色、黑色等。只要有卷轴,它就应该无限循环。目前,我无法将索引设置为在两端循环。任何帮助将不胜感激。
const container = document.querySelector('main')
const classes = ['white', 'black', 'purple', 'blue', 'orange']
let index = 0
const throttle = (func, limit) => {
let inThrottle
return function() {
const args = arguments
const context = this
if (!inThrottle) {
func.apply(context, args)
inThrottle = true
setTimeout(() => inThrottle = false, limit)
}
}
}
function changeColour(event) {
if (event.deltaY < 0) {
++index
if (index === index.length - 1) {
index = 0
}
console.log(index);
container.classList = classes[index]
}
if (event.deltaY > 0) {
--index
console.log(index);
if (index === 0) {
index = index.length - 1
}
container.classList = classes[index]
}
}
container.addEventListener('wheel', throttle(changeColour, 1250))
main {
height: 50px;
width: 50px;
border: 1px solid;
}
main.white {
background-color: #FFFFFF;
}
main.black {
background-color: #101010;
}
main.purple {
background-color: #8E002E;
}
main.blue {
background-color: #002091;
}
main.orange {
background-color: #C05026;
}
<main>
</main>
最佳答案
index = index.length - 1
index = classes.length -1
container.classList = classes[index]
container.classList.add(classes[index])
没有删除任何其他类的语句。
事件监听器和 on-event 属性不使用函数的括号,因为它会被误解为直接调用要运行的函数。回调函数是相反的,因为它们等待被调用。如果回调函数需要额外的参数,您需要用匿名函数包装回调函数,正确的语法如下:
document.querySelector('main').onwheel = scrollClass;
事件监听器:
document.querySelector('main').addEventListener('wheel', scrollClass)
事件属性传递额外参数:
document.querySelector('main').onwheel = function(event) {
const colors = ['gold', 'black', 'tomato', 'cyan', 'fuchsia'];
scrollClass(event, colors);
}
传递额外参数的事件监听器:
document.querySelector('main').addEventListener('wheel', function(event) {
const colors = ['gold', 'black', 'tomato', 'cyan', 'fuchsia'];
scrollClass(event, colors);
}
演示中评论的细节
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Wheel Event Demo</title>
<style>
:root {
font: 400 16px/1.2 Consolas;
}
html,
body {
width: 100%;
height: 100%;
}
body {
overflow-y: scroll;
overflow-x: hidden;
padding: 5px 0 20px;
}
main {
height: 50vh;
width: 50vw;
margin: 10px auto;
border: 1px solid #000;
}
main.gold {
background-color: #FFCC33;
transition: 0.5s;
}
main.black {
background-color: #101010;
transition: 0.5s;
}
main.tomato {
background-color: #FF6347;
transition: 0.5s;
}
main.cyan {
background-color: #E0FFFF;
transition: 0.5s;
}
main.fuchsia {
background-color: #FD3F92;
transition: 0.5s;
}
</style>
</head>
<body>
<main></main>
<script>
// Reference the main tag
const container = document.querySelector('main');
// Declare index
let index = 0;
/** scrollClass(event, array)
//@ Params: event [Event Object]: Default object needed for event properties
// array [Array].......: An array of strings representing classNames
//A Pass Event Object and array of classes
//B Reference the tag bound to the wheel event (ie 'main')
//C1 if the change of wheel deltaY (vertical) is less than 0 -- increment index
//C2 else if the deltaY is greater than 0 - decrement index
//C3 else it will just be index (no change)
//D1 if index is greater than the last index of array -- reset index to 0
//D2 else if index is less than zero -- reset index yo the last index of array
//D3 else index is unchanged.
//E Remove all classes of the currentTarget ('main')
//F Find the string located at the calculated index of the array and add it as a
className to currentTarget
*/
function scrollClass(event, array) { //A
const node = event.currentTarget; //B
index = event.deltaY < 0 ? ++index : event.deltaY > 0 ? --index : index; //C1-3
index = index > array.length - 1 ? 0 : index < 0 ? array.length - 1 : index; //D1-3
node.className = ''; //E
node.classList.add(array[index]); //F
}
/*
Register wheel event to main
When an event handler (ie scrollClass()) has more than the Event Object to pass
as a parameter, you need to wrap the event handler in an anonymous function.
Also, it's less error prone if the parameter is declared within the
anonymous function.
*/
container.addEventListener('wheel', function(event) {
const colors = ['gold', 'black', 'tomato', 'cyan', 'fuchsia'];
scrollClass(event, colors);
});
</script>
</body>
</html>
关于javascript - 使用 wheel event a increments 遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57280527/
我已经查看了 Microsoft 的 MSDN 和整个网络,但我仍然无法很好地了解它是什么。 这是否意味着已完成的程序在执行期间的不同时间加载 DLL,而不是在启动时一次性加载所有 DLL? 我完全偏
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Is there a performance difference between i++ and ++i
++a = b 操作未显示错误,但 a++ = b 在使用 g++ 编译时显示错误。两个变量都在这些操作之前初始化。 虽然这些操作没有实际用途,但我认为它们在编译时应该会出现相同的错误。你怎么认为?如
在this fiddle ,为什么计数器在调用 increment() 函数时不增加。已将计数器设置为增加对自身的分配后分配,因此在单击事件按钮(多次)后,计数器变量应该增加。 注意:如果我像这样进行
尝试在 iOS 中使用 swift 使用 firebase FieldValue.increment(1) 时,我收到编译器错误。该错误仅表示“‘增量’的使用不明确” 我已将所有 Pod 更新为所有使
我修复了 this question 中的代码这样它就可以编译: #define text (); #define return &argv;return int *** emphasized ()
我需要将每个增量 id 设置为前一个生成的 id 表的增量 id +5。这意味着每次自动增量必须有 5 个间隙。像这个系列2、7、12、17等.. 任何想法请分享。 最佳答案 请检查链接: https
我正在尝试进行设置,将类从 1 增加到 12,并根据变量列表(也是 12 个变量)设置背景颜色。 我很接近,但没有得到我所希望的。这是我第一次涉足 SASS 中的控制指令,所以请原谅我的无知。 目前,
我有以下代码 int cnt = 0; for (int i = 0; i 0 和 N(N-1)/2当所有 a[k] == 0 时。 对于增量的总数,为外部 for 循环添加 N 为
我们有一个方法可以维护我们应用程序中所有事件的全局序列索引。由于它是网站,因此预计具有线程安全的这种方法。线程安全的实现如下: private static long lastUsedIndex =
我有这个简单的表(仅用于测试): create table table ( key int not null primary key auto_increment, name varchar(30)
我见过很多不错的对象池实现。例如:C# Object Pooling Pattern implementation . 但似乎线程安全的总是使用锁,从不尝试使用 Interlocked.* 操作。 编
在 jQuery 中增加值的最佳方法是什么 .data()目的? 最佳答案 这看起来有点奇怪,但根据文档 .data()将所有数据字段作为对象返回,因此您可以直接更改其值: $('#id').data
是 Interlocked.Increment(ref x)比 x++ 快或慢对于各种平台上的整数和多头? 最佳答案 它较慢,因为它强制操作以原子方式发生,并且充当内存屏障,消除了处理器围绕指令重新排
我创建了一个购物车应用。当用户单击同一产品时,我要增加编号。 如果用户单击同一项目10次,则我想这样更新Firestore。 items:[{'productId':'1234','count':10
我需要循环遍历数据数组并为每个数组值打印一个“递增”字母。我知道我可以做到这一点: $array = array(11, 33, 44, 98, 1, 3, 2, 9, 66, 21, 45); //
Firestore 的 FieldValue.increment(someValue) 可以与其他字段正常配合使用,但不能与 map 配合使用。 我正在尝试增加 map 中属性的值。我有一个名为用户的
如果行的faction.factionname 与 INSERT 的 cards.faction 匹配,我正在尝试创建一个触发器,在 INSERT into card 之后增加派系表中的 cardco
我们有一个并发的多线程程序。我如何使样本数每次增加 +5 间隔? Interlocked.Increment 是否有间隔过载?我没有看到它列出。 Microsoft Interlocked.Incre
我正在运行时创建动态类型,目的是从该类型创建/序列化/反序列化对象,然后绑定(bind)到网格控件。一切正常,但我用数据库中的记录更新属性的方式很可悲。我从某个地方粘贴了这个 setter 生成器,当
我是一名优秀的程序员,十分优秀!