- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 2 套 polymer 纸标签 + iron-scroll-spy 自定义元素。
Paper Tabs 使用“iron-selector”元素来保持它的状态。单击选项卡时,Iron Scroll Spy 将动画滚动到页面的各个部分,并在滚动时更新纸张选项卡状态。现在我想在底部添加一个“paper fab”按钮,允许用户“跳转”到下一部分。
我的目标:
✔ 如果选择了“页眉标签 1”,则显示“页脚标签 2”
✔ 如果选择了“页眉标签 2”,则显示“页脚标签 3”
✔ 如果选择了“页眉标签 3”,则显示“页脚标签 4”
✖ 如果选择了“header tab 4”,则显示“footer tab 1”
差不多了!...
演示: http://oneezy.com/demo/scroll-spy/index.html
jsfiddle: https://jsfiddle.net/oneeezy/c3ertupe
(I'm using polygit in jsfiddle, and I there is some weird jumpiness going on with that example..hence why I provided the first demo link).
默认情况下,页脚标签为“灰色”。我正在使用 CSS 伪选择器将“选定的”页脚选项卡变成黑色……但我做不到。选择“页眉标签 4”时,它不会显示“页脚标签 1”。这是拼图的最后一 block 。如果可能的话,我想使用 CSS 或以声明方式使用 javascript。
实现此功能的最佳方法是什么?
代码:
<base href="https://polygit.org/iron-scroll-spy+zecat+v1.0/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
<link rel="import" href="iron-scroll-spy/iron-scroll-spy.html">
<link rel="import" href="iron-scroll-spy/iron-scroll-spy-behavior.html">
<link rel="import" href="app-layout/app-header/app-header.html">
<link rel="import" href="app-layout/app-toolbar/app-toolbar.html">
<link rel="import" href="app-layout/app-scroll-effects/app-scroll-effects.html">
<link rel="import" href="paper-tabs/paper-tabs.html">
<link rel="import" href="paper-tabs/paper-tab.html">
<link rel="import" href="paper-fab/paper-fab.html">
<link rel="import" href="iron-icons/hardware-icons.html">
<!-- DOM Module
---------------------------------------->
<dom-module id="scroll-spy-app">
<template>
<style>
:host {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
position: relative;
height: 100%;
padding-top: 150px;
}
/* Flex Classes */
.flex-horizontal { display: -ms-flexbox; -ms-flex-direction: row; display: -webkit-flex; -webkit-flex-direction: row; display: flex; flex-direction: row; }
.flex-vertical { display: -ms-flexbox; -ms-flex-direction: column; display: -webkit-flex; -webkit-flex-direction: column; display: flex; flex-direction: column; }
/* HEADER TABS (normal order)
***************************************************************************************************************************************************************************/
app-header { background: #009688; position: fixed; top: 0; left: 0; width: 100%; height: 128px; }
app-header app-toolbar { background: #009688; }
app-header app-toolbar.toolbar-top { position: relative; z-index: 1; }
app-header app-toolbar.toolbar-bottom { position: relative; z-index: 2; }
/* FOOTER TABS (Custom Order)
***************************************************************************************************************************************************************************/
footer { position: fixed; bottom: 0; right: 0; width: 100%; z-index: 100; background: #ccc; }
footer paper-tabs { position: relative; height: 70px; }
footer paper-tabs paper-tab paper-fab { background: black; }
/* Inactive */
footer paper-tabs paper-tab { opacity: .25; }
footer paper-tabs paper-tab:nth-of-type(1) { } /* order: 4; */
footer paper-tabs paper-tab:nth-of-type(2) { } /* order: 1; */
footer paper-tabs paper-tab:nth-of-type(3) { } /* order: 2; */
footer paper-tabs paper-tab:nth-of-type(4) { } /* order: 3; */
/* Selected */
footer paper-tabs paper-tab.iron-selected { }
footer paper-tabs paper-tab.iron-selected:nth-of-type(1) ~ paper-tab:nth-of-type(2) { opacity: 1; display: block; }
footer paper-tabs paper-tab.iron-selected:nth-of-type(2) ~ paper-tab:nth-of-type(3) { opacity: 1; display: block; }
footer paper-tabs paper-tab.iron-selected:nth-of-type(3) ~ paper-tab:nth-of-type(4) { opacity: 1; display: block; }
footer paper-tabs paper-tab.iron-selected:nth-of-type(4) ~ paper-tab:nth-of-type(1) { opacity: 1; display: block; }
/* MAIN CONTENT (Scroll Spy)
***************************************************************************************************************************************************************************/
section { min-height: 100vh; }
section iron-scroll-spy { }
section iron-scroll-spy div { min-height: 100vh; padding: 250px 100px; border-bottom: 1px solid grey; }
</style>
<app-header condenses reveals fixed effects="waterfall">
<app-toolbar class="toolbar-top">Iron Scroll Spy</app-toolbar>
<app-toolbar class="toolbar-bottom" sticky>
<paper-tabs selected="{{scrollSelected}}">
<paper-tab>Tab 1</paper-tab>
<paper-tab>Tab 2</paper-tab>
<paper-tab>Tab 3</paper-tab>
<paper-tab>Tab 4</paper-tab>
</paper-tabs>
</app-toolbar>
</app-header>
<section id="scrollTarget">
<iron-scroll-spy selected="{{scrollSelected}}" id="scrollSpy">
<div>
<h1>Section 1</h1>
<span>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, provident asperiores. Itaque quas architecto commodi, quam dicta beatae blanditiis obcaecati, voluptatibus, quisquam sint necessitatibus aliquid vero sunt dolor iusto quos!</span>
</div>
<div>
<h1>Section 2</h1>
<span>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, provident asperiores. Itaque quas architecto commodi, quam dicta beatae blanditiis obcaecati, voluptatibus, quisquam sint necessitatibus aliquid vero sunt dolor iusto quos!</span>
</div>
<div>
<h1>Section 3</h1>
<span>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, provident asperiores. Itaque quas architecto commodi, quam dicta beatae blanditiis obcaecati, voluptatibus, quisquam sint necessitatibus aliquid vero sunt dolor iusto quos!</span>
</div>
<div>
<h1>Section 4</h1>
<span>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, provident asperiores. Itaque quas architecto commodi, quam dicta beatae blanditiis obcaecati, voluptatibus, quisquam sint necessitatibus aliquid vero sunt dolor iusto quos!</span>
</div>
</iron-scroll-spy>
</section>
<footer>
<paper-tabs selected="{{scrollSelected}}" align-bottom="true">
<paper-tab tab="hidden">
Tab 1
<paper-fab icon="hardware:keyboard-arrow-up"></paper-fab>
</paper-tab>
<paper-tab tab="active">
Tab 2
<paper-fab icon="hardware:keyboard-arrow-down"></paper-fab>
</paper-tab>
<paper-tab tab="hidden">
Tab 3
<paper-fab icon="hardware:keyboard-arrow-down"></paper-fab>
</paper-tab>
<paper-tab tab="hidden">
Tab 4
<paper-fab icon="hardware:keyboard-arrow-down"></paper-fab>
</paper-tab>
</paper-tabs>
</footer>
</template>
<script>
Polymer({
is: 'scroll-spy-app',
ready: function() {
this.$.scrollSpy.scrollTarget;
}
});
</script>
</dom-module>
<!-- Custom Element
---------------------------------------->
<scroll-spy-app></scroll-spy-app>
最佳答案
~ 一般兄弟选择器不会按照您尝试使用的方式工作。它的语法 A ~ B 要求 B 在 DOM 树中在 A 之后。
这里有一个想法可以用来实现你想要的:将 scrollSelected 的值放入某个标记的属性中,例如页脚:
<footer selected$="[[scrollSelected]]">
然后使用 [attribute="value"] 选择器:
footer[selected="0"] paper-tab:nth-of-type(2) { opacity: 1; display: block; }
footer[selected="1"] paper-tab:nth-of-type(3) { opacity: 1; display: block; }
footer[selected="2"] paper-tab:nth-of-type(4) { opacity: 1; display: block; }
footer[selected="3"] paper-tab:nth-of-type(1) { opacity: 1; display: block; }
我已经用上述更改更新了你的 jsfiddle,检查一下: https://jsfiddle.net/ncn99dpa/
编辑
经过深思熟虑 - 您可能想编写代码,在每次添加新的纸张选项卡时都不需要在 CSS 中使用新的选择器。在这种情况下,试试这个 jsfiddle:https://jsfiddle.net/uwjdz7fg/
在那里,我只为一个新类“x-focused”制定了一个 css 规则,而不是所有那些页脚 (...) paper-tab (...) 规则,我在scrollSelected 属性将该类添加到适当的元素并从前一个元素中删除。
关于javascript - 选择选项卡时,显示下一个选项卡。如果选择最后一个选项卡,则显示第一个选项卡( polymer 纸选项卡+滚动 spy ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38406716/
在 Android 的 API > 19 中是否有任何方法可以获取可移动 SD 卡的路径? 与外部 SD 卡一样,我们有 Environment.getExternalStorageDirectory
一些 Android 设备有 microSD(或其他存储卡)插槽,通常安装为 /storage/sdcard1 据我所知,自 Android 4.4 起 Google 限制了对此内存的访问,并在 An
我使用 Java Card 2.1.2 SDK 和 GPShell 作为与设备通信的方式在 Java Card 上构建一个项目。我从 GpShell 测试了 helloworld 示例,并成功发送了
我开发了一个应用程序,它有一个来电接收器,它适用于所有手机。一位用户有一部双 SIM 卡安卓手机。该应用程序适用于第一张 SIM 卡。但是当有人调用他的第二张 SIM 卡时,我们的应用程序不会被调用。
我有一个带预览的文件输入。 这是笔 Codepen 我想强制高度,我无法理解我该怎么做。我想将此组件的高度固定为 300px(示例),我还需要保持加载图像的正确纵横比,用灰色背景填充空白。现在我保持宽
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我正在使用此代码访问 SD card : import os from os.path import join from jnius import autoclass #from android.pe
我正在为数据记录设备编写固件。它以 20 Hz 的频率从传感器读取数据并将数据写入 SD 卡。但是,向SD卡写入数据的时间并不一致(大约200-300 ms)。因此,一种解决方案是以一致的速率将数据写
我正在使用以下代码将视频放到网站上,但是在垂直方向上,手机屏幕上只能看到视频的左半部分 我不是网络开发人员。有人可以告诉我确切的内容吗,如何使其正确放置在手机屏幕上? 是在youtube iframe
我正在使用 Vuetify 1.5 和 Vuetify 网格系统来设置我的布局。现在我有一个组件 HelloWorld我将其导入到我的 Parent 中成分。我已经在我的 HelloWorld 中设置
我使用 python 制作了一个简单的二十一点游戏。我制作了游戏的其余部分,但我正在努力放入 ASCII 卡,所以这只是代码的一小部分。我尝试将 * len(phand) 放在附加行的末尾。虽然这确实
我正在使用玩家卡设置 Twitter 卡。它可以在预览工具中运行,但文档说它需要在“twitter.com 现代桌面浏览器? native iOs 和 Android Twitter 应用程序?mob
任何旧的 GSM 兼容 SIM 卡(3G USIM 的奖励)。 我想我需要一些硬件?谁能为业余爱好者推荐一些便宜的东西,以及一些更专业的东西? 我认为会有一个带有硬件的 API 的完整文档,所以也许这
我使用 python 制作了一个简单的二十一点游戏。我制作了游戏的其余部分,但我正在努力放入 ASCII 卡,所以这只是代码的一小部分。我尝试将 * len(phand) 放在附加行的末尾。虽然这确实
我记得前一段时间读到有 cpu 卡供系统添加额外的处理能力来进行大规模并行化。任何人都有这方面的经验和任何资源来研究项目的硬件和软件方面吗?这项技术是否不如传统集群?它更注重功率吗? 最佳答案 有两个
我检查外部存储是否已安装并且可用于读/写,然后从中读取。我使用的是确切的官方 Android 示例代码 ( from here )。 它说外部存储未安装。 getExternalFilesDir(nu
在 Android 2.1 及更低版本中,Android 应用程序可以请求下载到 SD 卡上吗?另外我想知道应用程序是否可以请求一些包含视频的文件夹下载到 SD 卡上?以及如何做到这一点? 提前致谢。
我们编写了一个 Windows 设备驱动程序来访问我们的自定义 PCI 卡。驱动程序使用 CreateFile 获取卡的句柄。 我们最近在一次安装中遇到了问题,卡似乎停止工作了。我们尝试更换卡(更换似
有些新设备(例如 Samsung Galaxy)带有两个 SD 卡。我想知道是否有任何方法可以确定设备是否有两张 SD 卡或一张 SD 卡。谢谢 最佳答案 我认为唯一的方法是使用 检查可用根的列表 F
我正在尝试将文件读/写到 SD 卡。我已经尝试在我的真实手机和 Eclipse 中的模拟器上执行此操作。在这两种设备上,对/mnt/sdcard/或/sdcard 的权限仅为“d--------”,我
我是一名优秀的程序员,十分优秀!