Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
css
*, *::before, *::after { position: relative; box-sizing: border-box; } html { height: 100%; display: flex; background: #eee; } body { margin: auto; } :root { --color-primary: #00AEF2; } .calendar { font-size: 3vw; display: grid; grid-template-columns: repeat(7, 1fr); grid-gap: 0.25em 0; margin: auto; padding: 1em; background: #FFF; box-shadow: 0 1em 2em rgba(0, 0, 0, 0.25); border-radius: .5em; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .day:first-child { grid-column-start: 4; } .day { padding: 0.5em; text-align: center; } .day::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; } .day[data-selected]::before { border-radius: .5em; } .day[data-selected="start"]::before { border-top-right-radius: 0; border-bottom-right-radius: 0; } .day[data-selected], .day[data-selected] ~ .day { color: white; } .day[data-selected]::before, .day[data-selected] ~ .day::before { background-color: var(--color-primary); } .day[data-selected="start"] ~ .day:not([data-selected="end"])::before { opacity: 0.5; } .day[data-selected="end"][data-selected="end"]::before { border-top-left-radius: 0; border-bottom-left-radius: 0; } .day[data-selected="end"] ~ .day { color: inherit; } .day[data-selected="end"] ~ .day::before { background-color: transparent; }
JavaScript
console.clear(); // idle // -> onPointerDown // dragging // -> onPointerMove / onPointerOver // <- onPointerUp /*注意:我们根据第一选择和第二选择对数据进行了重新处理。稍后,我们将在"updateDOM"函数中计算哪个是开始日期和结束日期。*/ const data = { firstDate: null, secondDate: null }; const machine = { initial: 'idle', states: { idle: { on: { pointerdown: (data, event) => { data.firstDate = +event.currentTarget.dataset.day; data.secondDate = null; return 'dragging'; } } }, dragging: { on: { pointerover: (data, event) => { data.secondDate = +event.currentTarget.dataset.day; return 'dragging'; }, pointerup: 'idle', pointercancel: 'idle' } } } }; // idle let currentState = machine.initial; function send(event) { const transition = machine .states[currentState] .on[event.type]; if (typeof transition === 'function') { currentState = transition(data, event); updateDOM(); } else if (transition) { currentState = transition; updateDOM(); } } /* ---------------------------------- */ const allDayEls = document.querySelectorAll('[data-day]'); allDayEls.forEach(dayEl => { dayEl.addEventListener('pointerdown', send); dayEl.addEventListener('pointerover', send); }); document.body.addEventListener('pointerup', send); /* ---------------------------------- */ function updateDOM(){ document.querySelectorAll('[data-selected]') .forEach(el => { delete el.dataset.selected }); const startDate = Math.min(data.firstDate, data.secondDate); const endDate = Math.max(data.firstDate, data.secondDate); if ( startDate ) { const startDateEl = document.querySelector(`[data-day="${startDate}"]`); startDateEl.dataset.selected = "start"; } if ( endDate ) { const endDateEl = document.querySelector(`[data-day="${endDate}"]`); endDateEl.dataset.selected = "end"; } }
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>单击和拖动日期选择器-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号