gsap+Draggable实现拖拽式下拉框效果代码
代码语言:html
所属分类:拖放
代码描述:gsap+Draggable实现拖拽式下拉框效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/open-props.css"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/open-props.normalize.min.css"> <style> *, *:after, *:before { box-sizing: border-box; } body { display: grid; place-items: center; min-height: 100vh; font-family: 'Google Sans', sans-serif, system-ui; background: var(--surface-2); } [popover] { border: 0; padding: 0; margin: 0; -webkit-clip-path: inset(100% -100% -100vh -100%); clip-path: inset(100% -100% -100vh -100%); overflow: visible; /* transition: display 0.5s;*/ background: none; } /*[popover]:initial {*/ /* --show: 0;*/ /* transition: display 0.5s;*/ /*}*/ [popover]:popover-open { --show: 1; } /*.list:initial { transform: translate(0, 100%); }*/ .drag-list { --backdrop: var(--surface-1); transform: translate(0, calc(var(--show, 0) * 100%)); transition: transform 0.25s; } .drag-list { background: var(--backdrop); transform-origin: 50% 0%; } .drag-list:after, .drag-list:before { content: ""; position: absolute; bottom: 100%; height: 100%; left: 0; right: 0; background-color: var(--backdrop); } .drag-list:after { background: transparent; background-image: url("//repo.bfw.wiki/bfwrepo/images/book/bear-2022--black.png"); background-size: 60%; background-position: 50% 90%; background-repeat: no-repeat; opacity: 0.25; filter: saturate(0.3); } @media (prefers-color-scheme: dark) { .drag-list:after { background-image: url("//repo.bfw.wiki/bfwrepo/images/book/bear-2022--white.png"); } } [behavior=button] { padding: 0; width: 180px; background: var(--surface-1); position: relative; } [behavior=selected-value] { flex: 1; text-align: left; } [popover] { anchor-name: --listbox; display: block; background: red; translate: 0 -100%; } .pop-wrap { position: relative; } :is([behavior=button], option) { display: flex; align-items: center; gap: 1rem; padding: 0.5rem 1rem; justify-content: flex-start; } .handle { width: 48px; aspect-ratio: 1; position: absolute; top: 100%; left: 50%; translate: -50% 0; border-radius: 50%; transition: background 0.2s; overflow: hidden; } .handle:hover:not(:active) { background: hsl(0 0% 50% / 0.2); } .handle__cord { position: absolute; left: 50%; height: 100%; top: 40%; width: 10%; background: linear-gradient(90deg,transparent 55%, white), var(--text-2); translate: -50% -90%; } .handle__tug { position: absolute; width: 30%; aspect-ratio: 1; /* border-radius: 50%; */ background: linear-gradient(80deg, transparent 55%, hsl(0 0% 100% / 1)), var(--text-2); top: 40%; left: 50%; translate: -50% 0; -webkit-clip-path: polygon(0 100%, 25% 0, 75% 0, 100% 100%); clip-path: polygon(0 100%, 25% 0, 75% 0, 100% 100%); } .sock { width: 24px; flex-shrink: 0; } :root:not(:has(:checked)) [behavior=button] .sock path:first-of-type { fill: white; } :root:not(:has(:checked)) [behavior=button] .sock path:last-of-type { fill: black; } selectmenu:has(:popover-open) .marker { rotate: 180deg; } selectmenu { box-shadow: var(--shadow-5); } [behavior=button]:focus-visible { outline-color: hsl(var(--hue) 100% 50%); outline-offset: -2px; } .sock path:first-of-type { fill: hsl(var(--hue) 80% 80%); } .sock path:last-of-type { fill: hsl(var(--hue) 50% 50%); } [value=red] { --hue: 10; } [value=orange] { --hue: 30; } [value=yellow] { --hue: 45; } [value=green] { .........完整代码请登录后点击上方下载按钮下载查看
网友评论0