如何将元素翻译为里程表

2024-04-15

我有代码:

  <div class="wrap2" id="wrap" data-num="0">
    <span>0</span><span>1</span>...

CSS:

.wrap2[data-num="0"] {
  transfom:translate(0, 0);
}
.wrap2[data-num="1"] {
  transform:translate(0, -30px);
  }

https://jsfiddle.net/9t4zsuov/2/ https://jsfiddle.net/9t4zsuov/2/

但我想像里程表一样 - 数字只能滚动到顶部,而不是底部。有什么想法,怎么做?


正如@codyThompsonDev 所说,翻转区域是实现此目的的最佳方法。但我认为他错过了,当你从流水号码变成非流水号码时会发生什么。

例如,假设里程表随机尝试滚动到4, then 3, then 1。第一次可以滚到4没问题。第二次,它必须滚动到“13”,位于翻转区域。但随后,它尝试滚动到同样位于翻转区域中的“11”,导致其向后滚动。

要在这些情况下达到此效果,您必须将拨盘快速拉出翻转区域,然后再次向前滚动。我会使用它来实现window.requestAnimationFrame().

我做了一个小提琴来证明这一点:https://jsfiddle.net/tprobinson/8k125fmz/67/ https://jsfiddle.net/tprobinson/8k125fmz/67/

Add the debugBackground上课到dupa2直观地看到翻转效果。

我建议使用像这样的预处理器生成 CSS 类Sass https://sass-lang.com,因为手写也很容易出错。

document.getElementById("rand").addEventListener("click", randomize);

const debug = document.getElementById("debug");
const dupa = document.getElementById("cipa");

let animationInProgress = null

function setDebug(num) {
  debug.textContent = 'Number is really: ' + num
}

function animateOdometer(newNum) {
  // Add the smooth class and set the number to let it roll.
  dupa.classList.add('smooth')
  setDebug(newNum)
  dupa.dataset.num = newNum

  // In 1000 ms, remove the smooth class
  animationInProgress = window.setTimeout(() => {
    dupa.classList.remove('smooth')
    animationInProgress = null
  }, 1000)
}

function randomize() {

  let oldNum = Number.parseInt(dupa.dataset.num)
  if (oldNum === undefined || oldNum === null) {
    oldNum = 0
  }

  let newNum = Math.floor(Math.random() * 9) + 0;

  // If an animation is already in progress, cancel it
  if (animationInProgress) {
    window.clearTimeout(animationInProgress)
    dupa.classList.remove('smooth')
    animationInProgress = null
  }

  // If the new number is before our old number
  // we have to force a roll forwards
  if (newNum < oldNum) {
    newNum += 10
  }

  if (oldNum > 9) {
    // The dial was already rolled over. We need to
    // snap the dial back before rolling again.
    // Wait for a frame so we can snap the dial back
    dupa.dataset.num = oldNum - 10
    setDebug(oldNum - 10)
    dupa.classList.remove('smooth')

    window.requestAnimationFrame(() => {
      // Wait for one frame to let the snapback happen
      window.requestAnimationFrame(() => {
        // Then roll forward
        animateOdometer(newNum)
      })
    })

    return
  }

  // Roll the dial
  animateOdometer(newNum)
}
#rand,
#debug {
  margin-top: 50px;
}

.dupa1 {
  height: 30px;
  width: 30px;
  border: 1px solid #000;
  overflow: hidden;
}

.dupa2.smooth {
  transition: all 1s ease;
}

.dupa2 span {
  height: 30px;
  width: 30px;
  display: block;
  text-align: center;
  line-height: 30px;
}

.dupa2.debugBackground {
  background: linear-gradient(to bottom, #ffffff 0%, #ffffff 50%, #207cca 51%, #207cca 100%);
}

.dupa2[data-num="0"] {
  transform: translate(0, 0);
}

.dupa2[data-num="1"] {
  transform: translate(0, -30px);
}

.dupa2[data-num="2"] {
  transform: translate(0, -60px);
}

.dupa2[data-num="3"] {
  transform: translate(0, -90px);
}

.dupa2[data-num="4"] {
  transform: translate(0, -120px);
}

.dupa2[data-num="5"] {
  transform: translate(0, -150px);
}

.dupa2[data-num="6"] {
  transform: translate(0, -180px);
}

.dupa2[data-num="7"] {
  transform: translate(0, -210px);
}

.dupa2[data-num="8"] {
  transform: translate(0, -240px);
}

.dupa2[data-num="9"] {
  transform: translate(0, -270px);
}

.dupa2[data-num="10"] {
  transform: translate(0, -300px);
}

.dupa2[data-num="11"] {
  transform: translate(0, -330px);
}

.dupa2[data-num="12"] {
  transform: translate(0, -360px);
}

.dupa2[data-num="13"] {
  transform: translate(0, -390px);
}

.dupa2[data-num="14"] {
  transform: translate(0, -420px);
}

.dupa2[data-num="15"] {
  transform: translate(0, -450px);
}

.dupa2[data-num="16"] {
  transform: translate(0, -480px);
}

.dupa2[data-num="17"] {
  transform: translate(0, -510px);
}

.dupa2[data-num="18"] {
  transform: translate(0, -540px);
}

.dupa2[data-num="19"] {
  transform: translate(0, -570px);
}
<div class="dupa1">
  <div class="dupa2" id="cipa" data-num="0">
    <span>0</span>
    <span>1</span>
    <span>2</span>
    <span>3</span>
    <span>4</span>
    <span>5</span>
    <span>6</span>
    <span>7</span>
    <span>8</span>
    <span>9</span>
    <span>0</span>
    <span>1</span>
    <span>2</span>
    <span>3</span>
    <span>4</span>
    <span>5</span>
    <span>6</span>
    <span>7</span>
    <span>8</span>
    <span>9</span>
  </div>
</div>

<div id="debug">
  Number is really: 0
</div>

<button id="rand">rand</button>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将元素翻译为里程表 的相关文章

  • 在 MongoDB 中查找具有字符串 ID 数组的文档

    我有一个 id 字符串数组 我想将其与 find 函数一起使用 db companies find id in arr arr看起来像这样 563a2c60b511b7ff2c61e938 563a2c60b511b7ff2c61e8b7
  • 如何向 jQuery Tokeninput 添加占位符?

    如何将占位符添加到 jQuery Tokeninput 字段 一个正常的placeholder属性在这里不起作用 对于这样的输入
  • 限制文本区域中每行的字符数

    我整个周末都在寻找解决这个难题的方法 但尚未找到一个可以正常工作的解决方案 我想要实现的是限制文本区域中每行的字符数 不是相同地限制它们 而是我选择的每行不同的字符数 例如 我只想在我的文本区域中包含 4 行 第 1 2 和 3 行将限制为
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • Flask wtf.quick_form 运行一些 javascript 并设置表单变量

    我正在创建博客文章 到目前为止已经使用普通的 html 表单完成了 我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量 这很好地传递到服务器并通过 request form 获
  • 使用模态表单 ajax 超出 HTMLFormElement.toString 的最大调用堆栈大小

    我想使用模态窗口中的 ajax 请求提交表单 单击此链接可打开该模式 a class btn btn primary i class fa fa edit i Write a review a 模态窗口 div class modal fa
  • 在 MVC Razor 中的 C# 和 Javascript 之间共享常量

    我想在服务器上的 C 和客户端上的 Javascript 中都使用字符串常量 我将常量封装在 C 类中 namespace MyModel public static class Constants public const string
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • 访问 TypeScript 数组的最后一个元素

    TypeScript 中有访问数组最后一个元素的符号吗 在 Ruby 中我可以说 array 1 有类似的东西吗 您可以通过索引访问数组元素 数组中最后一个元素的索引将是数组的长度 1 因为索引是从零开始的 这应该有效 var items
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • 如何在 Bootstrap 3 中指定行高?

    使用 Bootstrap 3 我将 row 类的高度设置为 3 5em 我在行中有几个输入 它们与行的顶部对齐 我想让它们底部对齐 我尝试过垂直对齐 底部的样式 但这似乎不起作用 我想让东西底部对齐的原因是我有一个浮动标签 我在输入字段上方
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • 如何将 ResultSet 转换为 Object[] 并检索数据

    我有一个List
  • 如何使用和应用 JavaScript 装饰器?

    我试图了解如何在一段非常简单的代码中使用装饰器 这样我就可以将这个概念应用到我更大的项目中 从 Addy Osmani 的文章中得到启发here https medium com google developers exploring es
  • 网站所有者错误:网站密钥无效

    我创建了一个 reCAPTCHA 密钥并禁用Verify the origin of reCAPTCHA solutions 但我仍然遇到错误ERROR for site owner Invalid site key 我该如何解决 同样在这
  • Hartl 教程中的 bundle exec rspec spec/requests/static_pages_spec.rb 不起作用

    我正在按照 Michael Hartl 的 ruby on Rails 教程来测试示例应用程序 3 2 1 测试驱动开发 但在输入后出现以下错误bundle exec rspec spec requests static pages spe
  • Sublime Text 3 - 特定于语言的 Goto 定义键盘快捷键

    如何根据我正在使用的语言设置 Goto Definition 工作 例如 在 Python 中 我想使用 PythonIDE 的 go to 定义 keys ctrl d command python goto definition 而且
  • 如何减小 Android 上的 expo/react-native 应用程序的大小

    我正在通过使用 React Native 和 Expo 来开发一个小型词典应用程序 当我编译为 Apk 文件时 大小可达 30mb 安装到设备上后 大小可达 80mb 这是正常的吗 有什么方法可以减小应用程序的大小吗 感谢你们 对于使用 e
  • 使用随机盐改进密码散列

    我正在创建一个网站 并尝试决定如何加密用户密码以将其存储在 SQL 数据库中 我意识到使用简单的 md5 密码 是非常不安全的 我正在考虑使用 sha512 password salt 并且我一直在研究生成有用盐的最佳方法 我读过很多文章
  • 是否可以防止 getServerSideProps 在初始加载后导致整个页面重新加载?

    我有一个服务器渲染的 next js 应用程序 它是一个 3 页的结账流程 在第一页上 我正在获取各种设置数据 例如标签翻译和里面的购物篮商品getServerSideProps 如下 用户详细信息 js import React from
  • 将函数应用于数组的简单方法

    我知道array walk and array map 但是 当像这样使用前者时 在旧项目上 它失败了 array walk POST mysql real escape string 警告 mysql real escape string
  • Laravel Eloquent 按最新记录分组

    我正在尝试获取表上单个客户的最新记录 例子 ID Customer City Amount 1 Cust001 City1 2 2 Cust001 City2 3 3 Cust001 City1 1 4 Cust001 City2 1 5
  • 关于 Java 中文件加密性能的建议

    我正在做一些文件加密相关的工作 我能够加密 解密文件 但面临主要的性能问题 当我简单地读取 写入 700 MB 大小的视频文件时 我的代码的执行速度约为 27 28 MB s 但是当我执行加密时 我目前正在使用 PBEWithMD5AndD
  • 如果我的地图需要小而不是快,我应该使用 Map 的哪种实现?

    我习惯使用HashMap在我的程序中 因为我知道它通常是最有效的 如果使用得当 并且可以轻松处理大型地图 我知道关于EnumMap这对于枚举键非常有用 但我经常生成一个小地图 它永远不会变得很大 很可能很快就会被丢弃 并且没有并发问题 Is
  • 如何动态添加表格行,包括具有不同 ID 的文本框和选择框

    我开发了一个表 它具有在按下按钮时动态生成表格行的功能 但在添加新行时我无法添加选择框 我怎样才能做到这一点 下面列出了 HTML 和 JS 代码 function addRow tableID var table document get
  • 如何在发布之前将取消令牌插入 ReactiveX 流(IObservable)?

    如何将取消令牌插入现有的IObservable调用前的管道Publish在其上 即 在它成为IConnectableObservable 在订阅它之前 这必须是冷可观察管道的一部分 否则 我可以传递一个CancellationToken令牌
  • JAXB Java 7 与 Java 8 的差异

    我发现在 Java 7 上处理 Jaxb 与在 Java 8 上处理 Jaxb 之间存在另一个区别 我已将问题简化为一个简化的示例 并且代码应作为单个类运行 更改了类别 因此它与工作无关等 当 Unmarshaller 调用列表的 sett
  • IntelliJ读取远程服务器日志文件

    您知道如何设置远程配置以在服务器而不是本地计算机上显示日志文件吗 在编辑配置屏幕 日志 选项卡 上 我可以选择显示日志文件 但仅记录来自我的计算机的日志 而不是来自远程服务器的日志 我不介意是否必须为其安装任何插件 但到目前为止我找不到任何
  • 将非 unicode、非英语内容转换为 unicode

    我有一个 xyz 语言的文本内容 p style font family xyz eWvS kmwkMns kq t mWmb KmeIvkn kocokns aq mw Xn v p It will not display correct
  • Rails 3.1应用程序部署教程

    我正在寻找一个关于服务器上 Rails 3 1 1 应用程序的良好部署教程 我所说的 好 实际上是指 完整 我发布这个问题的原因是 尽管网络上有大量教程 谷歌 博客 书籍 其他 stackoverflow 问题等 但它们似乎都集中在部署过程
  • 有没有办法在php代码中注意到E_NOTICE?

    我有一个 PHP 脚本 需要执行几个小时 有时由于某些原因 例如 执行需要连接到互联网的脚本时出现网络问题等 执行过程会停止一段时间 然后做了错误的事情 当进程走向错误时它总是会导致 E NOTICE 我的问题是 有 任何 方法可以注意到脚
  • 如何将元素翻译为里程表

    我有代码 div class wrap2 span 0 span span 1 span CSS wrap2 data num 0 transfom translate 0 0 wrap2 data num 1 transform tran