WebChat, как установить цвет CSS для отправителя/получателя

Я работаю над внедрением веб-чата и столкнулся с проблемой, которую, надеюсь, легко решить.

Как изменить цвет отправителя/получателя, чтобы различать их? Я попытался сохранить цвета в своей базе данных, но проблема в том, как я могу определить, что я отправитель, а цвет получателей должен быть другим.

Вот как я реализовал свой чат:

Чат.js

connection.on("SessionNotification", function (user, message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var p = document.createElement("span");
    var q = document.createElement("li");
    p.setAttribute("class", "Sender");
    q.setAttribute("class", "Message");
    p.textContent = user + " - " + moment(datetime).format("DD-MM-YYYY HH:mm:ss");
    q.textContent = msg;
    document.getElementById("MessageList").appendChild(p);
    document.getElementById("MessageList").appendChild(q);
});

HTML

<script>
    $(document).ready(function () {
        $('#MessageList').stop().animate({
            scrollTop: $('#MessageList')[0].scrollHeight
        }, 2000);
        var SessionId = document.getElementById("Id").value;
        console.info(SessionId);
        var form_data = {
            "SessionId": SessionId
        };
        $.ajax({
            url: "@Url.Action("GetHistory", @ViewContext.RouteData.Values["controller"].ToString())",
            method: "POST",
            data: JSON.stringify(form_data),
            contentType: "application/json",
            success: function (result) {
                console.info(result);
                var output = JSON.parse(result);
                for (var i = 0; i < output.length; i++) {
                    var p = document.createElement("span");
                    var q = document.createElement("li");
                    p.setAttribute("class", "Sender");
                    q.setAttribute("class", "Message");
                    p.textContent = output[i].Name + " - " + moment(output[i].CreatedOn).format("DD-MM-YYYY HH:mm:ss");
                    q.textContent = output[i].Message;
                    document.getElementById("MessageList").appendChild(p);
                    document.getElementById("MessageList").appendChild(q);
                }

            },
            error: function (error) {
                console.info(error);
            }
        });
        return false;
    });
</script>
<div class = "col-sm-12">
    <h2>Session</h2>
    <hr />
</div>
<div class = "col-sm-12">
    <div class = "row">
        <div class = "col-sm-12">
            <div class = "form-group">
                <div id = "MessageListContainer">
                    <ul id = "MessageList">
                    </ul>
                </div>
            </div>
        </div>
    </div>
    <div class = "row">
        <div class = "col-sm-12">
            <div class = "form-group">
                @Html.HiddenFor(m => m.Id)
                @Html.HiddenFor(m => m.CurrentUser)
                <input class = "form-control col-sm-12" id = "Message" type = "text" />
            </div>
        </div>
    </div>
    <div class = "row">
        <div class = "col-sm-12">
            <div class = "form-group">
                <div class = "clearfix">
                    <div class = "pull-right">
                        <input id = "Send" type = "button" value = "Send" class = "btn btn-primary" />
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class = "col-sm-12">
        <hr />
    </div>
</div>
<script src = "~/aspnet/signalr/dist/browser/signalr.js"></script>
<script src = "~/js/chat.js"></script>

Вывод класса вашего отправителя и получателя: p.setAttribute("class", "Sender"); и q.setAttribute("class", "Message");?

Mukyuu 29.01.2019 04:49

да. Отправитель — это имя отправителя, которое находится в верхней части сообщения.

JianYA 29.01.2019 04:51

Если вывод класса соответствует вашим ожиданиям, я думаю, вы можете добавить .Sender{ /*your css styling*/} в свой css. И для приемника на основе класса приемника.

Mukyuu 29.01.2019 04:52

Но проблема в том, что класс Sender применяется повсеместно, и я не различаю то, что отправляю я, и то, что отправляет Получатель.

JianYA 29.01.2019 04:53

Ясно, вы можете отличить пользователя (отправителя) от партнера (получателя)? Основываясь на запросе, я полагаю, что если вы используете базу данных, добавьте класс в зависимости от результата.

Mukyuu 29.01.2019 04:55

Я могу попытаться сравнить и посмотреть, совпадает ли имя пользователя с именем в httpcontext, тогда установите css. Хотя выглядит немного странно.

JianYA 29.01.2019 05:02

Если вы можете это сделать, вы можете добавить ifelse, чтобы разделить их. Пример: если пользователь, то p.setAttribute("class", "Sender"); еще p.setAttribute("класс", "Получатель");

Mukyuu 29.01.2019 05:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
138
1

Ответы 1

Ваш вызов AJAX, который возвращается как JSON, имеет несколько полей, таких как Name и CreatedOn. Вы можете добавить дополнительную сторону полевого сервера для SessionId, которую вы все равно внедряете на стороне сервера в свой HTML. Затем вы можете сравнить, соответствует ли сеанс сообщения вашему сеансу. Если да, то это вы, а не получатель. Итак, у вас может быть что-то вроде:

JS

// You set this earlier on
var SessionId = document.getElementById("Id").value;

// ........ OTHER CODE IN BETWEEN

for (var i = 0; i < output.length; i++) {
    var p = document.createElement("span");
    var q = document.createElement("li");

    // If session ID matches current session (i.e. you) then add different class
    if (output[i].SessionId === SessionId) {
        // It is you
        p.setAttribute("class", "Sender");
    } else {
        // It is other person
        p.setAttribute("class", "Receiver");
    }

    q.setAttribute("class", "Message");
    p.textContent = output[i].Name + " - " + moment(output[i].CreatedOn).format("DD-MM-YYYY HH:mm:ss");
    q.textContent = output[i].Message;
    document.getElementById("MessageList").appendChild(p);
    document.getElementById("MessageList").appendChild(q);
}

CSS

.Sender {
    color: blue;
}
.Receiver {
    color: green;
}

Я попробую это. В настоящее время использование ajax заключается в том, что когда я обновляю страницу, она сразу же получает историю чата. Мне нужен способ реализовать то, что вы упомянули, когда я набираю новые сообщения.

JianYA 29.01.2019 05:06

Вместо SessionID можно использовать UserID. Это было бы лучшим решением в долгосрочной перспективе, если сеанс прервется и вы получите новый идентификатор.

Jeremy Harris 29.01.2019 05:07

Другие вопросы по теме