component.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { useEditor } from "@/modules/editor";
  2. import { css } from "@linaria/core";
  3. import { string } from "vue-types";
  4. import { useCompData } from ".";
  5. import { Image, Text } from "../../../basicUI";
  6. import { createUIComp } from "../../../defines/createUIComp";
  7. export const Component = createUIComp({
  8. props: {
  9. compId: string().isRequired,
  10. },
  11. setup(props) {
  12. const editor = useEditor();
  13. const { children } = useCompData(props.compId);
  14. function clickArrow() {
  15. if (editor.store.isEditMode) return;
  16. document.scrollingElement?.scrollTo({
  17. top: document.documentElement.clientHeight,
  18. });
  19. }
  20. return () => {
  21. return (
  22. <div class="!<md:h-100vh !md:h-10.8rem">
  23. <Image.Component class="w-full h-full" compId={children.bg} />
  24. <Text.Component class={titleCls} compId={children.title} />
  25. <div class={arrowCls} onClick={clickArrow}>
  26. </div>
  27. </div>
  28. );
  29. };
  30. },
  31. });
  32. const titleCls = css`
  33. position: absolute;
  34. left: 50%;
  35. top: 20%;
  36. width: 7rem;
  37. transform: translateX(-50%);
  38. `;
  39. const arrowCls = css`
  40. position: absolute;
  41. left: 50%;
  42. bottom: 0.42rem;
  43. width: 0.7rem;
  44. height: 0.7rem;
  45. line-height: 0.7rem;
  46. font-size: 0.36rem;
  47. text-align: center;
  48. color: #fff;
  49. border: 2px solid #fff;
  50. border-radius: 50%;
  51. transform: translateX(-50%);
  52. `;