vue.js实现用户评论、登录、注册、及修改用户部分信息功能代码。

21 篇文章 0 订阅

github效果在线预览

仓库地址:
https://github.com/zhongyoucong/vuejs/

vue.js实现用户评论、登录、注册、及修改用户部分信息功能代码。效果图如下:

登入后:
这里写图片描述
登入前:
这里写图片描述
登录框:
这里写图片描述
注册框:
这里写图片描述

html代码部分:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>index</title>
    <link rel="stylesheet" href="css/font-awesome.min.css" />
    <link rel="stylesheet" href="css/index.css" />
    <script type="text/javascript" src="../lib/vue.min.js"></script>
    <script type="text/javascript" src="../lib/jquery-1.11.3.min.js"></script>
</head>

<body>
    <div id="comment">
        <!--登录-->
        <div class="loginbox" v-show="loginStatus" @click="loginboxClick()" style="display:none;">
            <div class="box" @click="stopProp()">
                <h3>用户登录</h3>
                <form name="login" id="login">
                    <input type="text" placeholder="请输入用户名" class="username">
                    <input type="password" placeholder="请输入登录密码" class="psw">
                    <input type="button" value="立即登录" @click="login()">
                    <input type="button" value="立即注册" @click="showregister()" class="blueBtn">
                </form>
            </div>
        </div>
        <!--登录-->

        <!--注册-->
        <div class="loginbox registerbox" v-show="registerStatus" @click="registerboxClick()" style="display:none;">
            <div class="box" @click="stopProp()">
                <h3>用户注册</h3>
                <form name="register" id="register">
                    <input type="text" placeholder="请输入用户名" class="username">
                    <input type="password" placeholder="请输入登录密码" class="psw">
                    <input type="button" value="立即注册" @click="register()">
                    <input type="button" value="立即登录" @click="showLogin()" class="blueBtn">
                </form>
            </div>
        </div>
        <!--注册-->

        <!--评论-->
        <div class="commentbox">
            <div class="userbar" v-show="userbarStatus" style="display:none;">
                <img :src="'img/'+currentUser.userimg" alt="" title="" class="userimg">
                <span class="loginout" @click="loginout()">退出账号&nbsp;&nbsp;<i class="icon-style icon-signout"></i></span>
                <span class="username" v-text="currentUser.username"><i class="icon-style icon-user-md">&nbsp;</i></span>
                <p><span class="userword" v-text="currentUser.words" contenteditable="false"></span><i class="icon-style icon-edit" @click="editUserWords()"></i></p>
            </div>
            <div class=" commemtlist ">
                <dl v-for="(value, index) in comments ">
                    <dt>
                        <img :src=" 'img/'+value.userimg ">
                        <span class="username ">{{value.username}}</span>
                    </dt>
                    <dd class="commentwords "><i class="icon-style icon-file-alt "></i>{{value.words}}</dd>
                    <dd class="btbar ">
                        <span class="like red "><i class="icon-style icon-thumbs-up "></i>点赞(<strong @click="like(index) ">{{value.like}}</strong>)</span>
                        <span class="notlike red "><i class="icon-style icon-thumbs-down "></i>点踩(<strong @click="notlike(index) ">{{value.nolike}}</strong>)</span>
                        <span class="data red "><i class="icon-style icon-calendar "></i>时间<strong>{{value.time}}</strong></span>
                    </dd>
                </dl>
                <div class="wordsbox ">
                    <textarea placeholder="请输入留言 "></textarea>
                    <span @click="showLogin()" v-show="lrBtnStatus">登录</span>
                    <span @click="showregister()" v-show="lrBtnStatus">注册</span>
                    <input type="submit" value="提交 " @click="subCommont()" />
                </div>
            </div>
        </div>
        <!--评论-->

    </div>
</body>

</html>
<script src="js/index.js "></script>

css代码部分:

* {
    margin: 0;
    padding: 0;
    font-size: 14px;
    font-family: "微软雅黑";
}

body {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

#comment .loginbox {
    position: fixed;
    z-index: 99999;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, .85);
}

#comment .icon-style {
    margin-right: 5px;
    color: #999;
}

#comment .loginbox .box {
    height: 300px;
    width: 300px;
    padding: 40px 20px 20px 20px;
    margin: 100px auto;
    background: #fff;
}

#comment .loginbox .box h3 {
    font-size: 16px;
    font-family: "微软雅黑";
    text-align: center;
}

#comment .loginbox .box input {
    height: 40px;
    width: 100%;
    border: 1px solid red;
    margin: 10px 0;
    border-radius: 2px;
}

#comment .loginbox .box input[type="button"] {
    background: red;
    color: #fff;
    font-family: "微软雅黑";
}

body #comment .loginbox .box .blueBtn {
    background: #0089FF;
    border: 1px solid #0089FF;
}

#comment .userbar {
    height: 200px;
    padding: 10px;
    text-align: center;
}

#comment .userbar .userimg {
    height: 100px;
    width: 100px;
    border-radius: 50px;
}

#comment .userbar .username {
    display: block;
    padding: 10px 0;
    font-size: 18px;
    color: red;
    font-weight: bolder;
}

#comment .commentbox {
    position: relative;
    top: 40px;
    width: 600px;
    padding: 20px 20px 30px 20px;
    background: #eee;
    margin: 0 auto;
}

#comment .commentbox .loginout {
    display: block;
    text-decoration: underline;
    color: blue;
    cursor: pointer;
}

#comment .commentbox .userword {
    outline: none;
}

#comment .commemtlist {
    padding: 10px;
}

#comment .commemtlist dl {
    padding: 20px 0;
    border-bottom: 1px solid #D2D2D2;
}

#comment .commemtlist dl dt {
    float: left;
    text-align: center;
    margin-right: 15px;
}

#comment .commemtlist dl dt img {
    height: 50px;
    width: 50px;
    border-radius: 25px;
}

#comment .commemtlist dl dd {
    padding-bottom: 10px;
}

#comment .commemtlist .btbar span {
    margin-right: 15px;
    font-size: 10px;
}

#comment .commemtlist .btbar .red strong {
    color: red;
    margin: 0 3px;
    font-weight: normal;
    cursor: pointer;
}

#comment .commemtlist .username {
    display: block;
    font-size: 12px;
    text-align: center;
}

#comment .commemtlist .wordsbox textarea {
    height: 100px;
    width: 100%;
    margin-top: 20px;
    margin-bottom: 10px;
    resize: none;
}

#comment .commemtlist .wordsbox span {
    font-size: 13px;
    margin-right: 15px;
    text-decoration: underline;
    color: blue;
    cursor: pointer;
}

#comment .commemtlist .wordsbox input {
    float: right;
    width: 80px;
    height: 28px;
    text-align: center;
    color: #fff;
    background: red;
    border: none;
    border-radius: 3px;
}

javascript代码部分

//日期格式化函数
Date.prototype.format = function(fmt) {
        var o = {
            "M+": this.getMonth() + 1, //月份 
            "d+": this.getDate(), //日 
            "h+": this.getHours(), //小时 
            "m+": this.getMinutes(), //分 
            "s+": this.getSeconds(), //秒 
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
            "S": this.getMilliseconds() //毫秒 
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
            }
        }
        return fmt;
    }
    //创建vue实例
var v = new Vue({
    el: "#comment",
    data: {
        //原始用户评论信息
        comments: [{
            username: "张三",
            userimg: "user02.jpg",
            words: "这历史可以啊,不错不错。呵呵!",
            like: 87,
            nolike: 53,
            time: "2017-02-17 09:15:25"
        }, {
            username: "李四",
            userimg: "user01.jpg",
            words: "吃饭去了啊。呵呵!",
            like: 23,
            nolike: 63,
            time: "2017-3-27 10:12:34"
        }, {
            username: "王五",
            userimg: "user03.jpg",
            words: "这评论可以。呵呵!",
            like: 27,
            nolike: 33,
            time: "2017-04-02 03:26:54"
        }],
        //原始用户信息
        users: [{
            username: "zhangsan",
            password: "123456",
            userimg: "user.jpg",
            words: "世界那么大我想去看看。"
        }, {
            username: "zyc",
            password: "123456",
            userimg: "user01.jpg",
            words: "雨过天晴的美好。"
        }, {
            username: "admin",
            password: "123456",
            userimg: "user02.jpg",
            words: "下大雨了,怎么办啊。"
        }],
        //当前用户信息
        currentUser: { username: "", words: "", userimg: "" },
        //登录框显示或隐藏状态
        loginStatus: false,
        //注册框显示或隐藏状态
        registerStatus: false,
        //用户信息栏显示或隐藏状态
        userbarStatus: false,
        //登录注册入口显示或隐藏状态
        lrBtnStatus: true
    },
    methods: {
        //点击登录
        showLogin: function() {
            document.getElementById("login").reset();
            this.loginStatus = true;
            this.registerStatus = false;
        },
        //点击注册
        showregister: function() {
            document.getElementById("register").reset();
            this.loginStatus = false;
            this.registerStatus = true;
        },
        //退出登录
        loginout: function() {
            //清空当前用户数据
            this.currentUser.username = "";
            this.currentUser.words = "";
            this.currentUser.userimg = "";
            alert("退出成功!");
            this.userbarStatus = false;
            //登录或注册入口显示
            this.lrBtnStatus = true;
        },
        //登录遮罩层点击事件
        loginboxClick: function() {
            this.loginStatus = false;
        },
        //注册遮罩层点击事件
        registerboxClick: function() {
            this.registerStatus = false;
        },
        //点击登录或注册框阻止事件冒泡
        stopProp: function(e) {
            e = e || event;
            e.stopPropagation();
        },
        //点赞
        like: function(index) {
            this.comments[index].like++;
        },
        //点踩
        notlike: function(index) {
            this.comments[index].nolike++;
        },
        //登录
        login: function() {
            var username = $(".loginbox").find(".username").val(); //获取用户名
            var psw = $(".loginbox").find(".psw").val() //获取密码
            var flag = false;
            for (var i = 0, len = this.users.length; i < len; i++) {
                //判断用户名密码是否正确
                if (this.users[i].username === username && this.users[i].password === psw) {
                    flag = true;
                    alert("登录成功!");
                    //用户登录框消失
                    this.loginStatus = false;
                    //用户登录信息显示
                    this.userbarStatus = true;
                    //设置用户栏信息
                    this.currentUser.username = this.users[i].username;
                    this.currentUser.words = this.users[i].words;
                    this.currentUser.userimg = this.users[i].userimg;
                    //登录或注册入口消失
                    this.lrBtnStatus = false;
                    break;
                }
            }
            if (!flag) {
                alert("输入的账号或密码不正确!");
                document.getElementById("login").reset();
            }

        },
        //注册
        register: function() {
            var obj = {}; //创建用户账号密码容器
            var flag = false;
            var username = $(".registerbox").find(".username").val(); //获取用户名
            var psw = $(".registerbox").find(".psw").val() //获取密码
                //判断用户名是否存在
            for (var i = 0, len = this.users.length; i < len; i++) {
                if (this.users[i].username === username) {
                    flag = true;
                    alert("该用户名已经被注册!");
                    break;
                }
            }
            if (!flag) {
                if (username == "" || psw == "") {
                    alert("账号和密码不能为空!");
                } else {
                    var randomNum = Math.floor(Math.random() * 5) + 1;
                    //随机生成头像
                    var randomImg = "user0" + randomNum + ".jpg";
                    obj.username = username;
                    obj.password = psw;
                    obj.words = "系统默认标语。"
                    obj.userimg = randomImg;
                    //添加用户信息到用户列表
                    this.users.push(obj);
                    alert("注册成功!");
                    //设置用户信息栏显示
                    this.userbarStatus = true;

                    //设置用户栏信息
                    this.currentUser.username = obj.username;
                    this.currentUser.words = obj.words;
                    this.currentUser.userimg = obj.userimg;
                    //登录或注册入口消失
                    this.lrBtnStatus = false;
                    //重置表单数据
                    document.getElementById("register").reset();
                    //注册框消失
                    this.registerStatus = false;
                }
            }
        },
        //编辑用户心情
        editUserWords: function() {

            var wordsObj = $(".commentbox").find(".userword");
            var edit = wordsObj.attr("contenteditable"); //获取元素的H5可编辑属性

            if (edit == "false") {
                //打开可编辑功能
                wordsObj.attr("contenteditable", "true");
            } else {
                for (var i = 0, len = this.users.length; i < len; i++) {

                    //查找对应用户名
                    if (this.users[i].username === this.currentUser.username) {
                        //改变用户信息里面的words数据
                        this.currentUser.words = $(".commentbox").find(".userword").text();
                        this.users[i].words = this.currentUser.words;
                        //关闭可编辑功能
                        wordsObj.attr("contenteditable", "false");
                        alert("保存成功!");
                    }
                }
            }
        },
        //点击提交评论
        subCommont: function() {
            if (!this.userbarStatus) {
                alert("登录之后才可以评论!");
                this.loginStatus = true;
            } else {
                if ($(".wordsbox textarea").val() == "") {
                    alert("请先填写评论内容!");
                } else {
                    var obj = {}; //评论信息对象的容器
                    obj.username = this.currentUser.username;
                    obj.userimg = this.currentUser.userimg;
                    obj.words = $(".wordsbox textarea").val();
                    obj.like = 0;
                    obj.nolike = 0;
                    obj.time = new Date().format("yyyy-MM-dd hh:mm:ss");

                    //将评论信息压入评论信息列表
                    this.comments.push(obj);
                    alert("评论成功!");
                    $(".wordsbox textarea").val("");
                }
            }
        }
    }
});
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值