当前位置: 首页 > 知识库问答 >
问题:

Slack-Clone项目中的表情符号拾取器

李胡媚
2023-03-14

在我的slack克隆中有一个聊天输入字段。我遵循了一个关于添加emoji选择器(emoji-mart)的简单教程。聊天输入

然而,当我点击表情图标时,它会弹出表情图标所在的容器内的表情选择器窗口。(所以在聊天输入容器内部,同时改变其高度以包含emoji窗口)。emoji选择器窗口

我的问题是,我如何才能让它弹出聊天输入的上方而不是里面就像图片中原来的一样。是造型的问题还是我必须添加任何特殊的功能??emoji窗口正确方式

仅用于聊天输入的代码:

import React from 'react'
import styled from 'styled-components'
import SendIcon from '@material-ui/icons/Send';
import {ChatInputIconsData} from '../data/ChatInputIcons'
import {ChatIconsInputData} from '../data/ChatInputIcons'
import EmojiEmotionsIcon from '@material-ui/icons/EmojiEmotions';
import "emoji-mart/css/emoji-mart.css";
import { Picker } from "emoji-mart";
import {useState} from 'react'


function ChatInput() {

    const [emojiPickerState, SetEmojiPicker] = useState(false);
    const [message, SetMessage] = useState("");

    let emojiPicker;
    if (emojiPickerState) {
        emojiPicker = (
        <Picker
            title="Pick your emoji…"
            emoji="point_up"
            onSelect={emoji => SetMessage(message + emoji.native)}
        />
        );
    }

    function triggerPicker(event) {
        event.preventDefault();
        SetEmojiPicker(!emojiPickerState);
    }

    return (
        <Container>
            <InputContainer>
                <form>
                    <input type="text" placeholder="Message here..."  value={message}
                    onChange={event => SetMessage(event.target.value)} />
                </form>
                <IconsContainer>
                    <LeftIcons>
                        {
                        ChatInputIconsData.map(item => (
                            <LeftIconsItem>
                                {item.icon}
                            </LeftIconsItem>
                        ))
                        }
                    </LeftIcons>
                    <RightIcons>
                        {
                        ChatIconsInputData.map(item => (
                            <RightIconsItem>
                                {item.icon}
                            </RightIconsItem>
                        ))
                        }
                        {emojiPicker}
                        <Emoji onClick={triggerPicker}/>
                        <SendButton>
                            <Send />
                        </SendButton>
                    </RightIcons>
                </IconsContainer>
            </InputContainer>
        </Container>
    );
}

export default ChatInput


const Container = styled.div`
    padding-left:20px;
    padding-right: 20px;
    padding-bottom: 24px;
`;

const InputContainer = styled.div`
    border: 1px solid #8D8D8E;
    border-radius: 4px;

    form {
        display: flex; 
        height: 42px; 
        align-items: center;
        padding-left: 10px;
        input {
            flex: 1;
            border: none;
            font-size: 13px;
        }
        input:focus{
            outline: none;
        }
    }
`;

const IconsContainer = styled.div`
    display: flex;
    justify-content: space-between;
    background: rgba(var(--sk_foreground_min_solid,248,248,248),1);
    border-top: 1px solid rgba(83, 39, 83, .13); 
    overflow: visible;
`;

const LeftIcons = styled.div`
    display: flex;
    justify-content: center;
    align-items: center;
`;
const LeftIconsItem = styled.div`
    border-radius: 2px;
    width: 32px;
    height: 32px; 
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 5px;
    cursor: pointer;
    color: #606060;
`;

const RightIcons = styled.div`
    display: flex;
    justify-content: center;
    align-items: center;
`;

const RightIconsItem = styled.div`
    border-radius: 2px;
    width: 32px;
    height: 32px; 
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 5px;
    cursor: pointer;
    color: #606060;
    
`;

const Emoji = styled(EmojiEmotionsIcon)`
    border-radius: 2px;
    width: 32px;
    height: 32px; 
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 5px;
    cursor: pointer;
    color: #606060;
`;

const SendButton = styled.div`
    background: #007a5a;
    border-radius: 2px;
    width: 32px;
    height: 32px; 
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 5px;
    cursor: pointer;

    .MuiSvgIcon-root {
        width: 18px;
    }

    :hover {
        background: #148567;
    }
`;

const Send = styled(SendIcon)`
    color: #D9D9D9;
`;

共有1个答案

汪弘盛
2023-03-14

您需要使用Css

可以使用的方法类型:

职位:

.EmojiPicker {
position: relative;
top: -30px;
right: 0;
left: 0;
bottom: 0;    
}

边距:

.element {
  margin-bottom: 10px; // THIS WILL CHANGE OTHER CLASSES SO USE POSITIONS
}
 类似资料:
  • 本文向大家介绍Markdown 项目符号列表,包括了Markdown 项目符号列表的使用技巧和注意事项,需要的朋友参考一下 示例 项目符号列表的字符: 星号 加号 减号 请注意: 为了获得最佳效果,您必须使用相同的字符,因为在下面的示例中可以看到,不同的符号使列表中断 项目符号列表的字符: 星号1 星号2 星号3 加号1 加号2 加号3 减号1 减号2 减号3

  • 问题内容: 例如,我需要使用星号(★)作为列表项目的项目符号。 我已经阅读了CSS3模块:Lists,它描述了如何使用自定义文本作为项目符号,但是它对我不起作用。我认为,浏览器根本不支持伪元素。 不使用图像怎么办? 问题答案: 编辑 我可能不再建议使用图像。我会坚持使用Unicode字符的方法,如下所示: 老答案 我可能会选择图像背景,它们更 有效, 通用且对跨浏览器友好。 这是一个例子:

  • 问题内容: 我所希望的是能够将列表中项目符号的颜色更改为浅灰色。它默认为黑色,我不知道如何更改它。 我知道我只能使用图像;如果可以的话,我宁愿不这样做。 问题答案: 项目符号从文本中获取颜色。因此,如果您要使用不同于列表中文本颜色的项目符号,则必须添加一些标记。 将列表文本换成跨度: 然后稍微修改您的样式规则:

  • 我有以下表情符号,当在markdown中使用时,它会转换为星星表情符号,我希望它们在自述文件中居中对齐。 我曾经用过 但这是行不通的。

  • 我从类。 包含类以及另外两个相关类,和。所有类都位于相同的根路径。 然而,当编译这个java项目在IntelliJ我得到不能找到符号HUD的行我使调用。 这个完全相同的代码在eclipse中编译得很好,知道问题出在哪里吗?

  • 我从类调用一个静态单例实例。 包含类以及其他两个相关类和。所有类都在同一个根路径中。 这个完全相同的代码在eclipse中编译得很好,知道问题是什么吗?