前言
目前所学甚浅,点赞功能用cookie做的。虽基本功能已经实现,却藏着不小的bug。先记录一下,待厚积所学,加以改之。
前端实现:
添加onclick事件,函数建立cookie,通过判断cookie来确定是点赞数是加or减。
先写一个获得cookie的函数。
// 查询cookie的函数
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
return "";
}
if (getCookie('is_like') === 'false') {
document.getElementById('like_num').style.color = "red";
}
else
{
document.getElementById('like_num').style.color = "blue";
};
判断cookie,确定是点赞数是加or减。
function likeChange() {
if (getCookie('is_like') === 'false') {
document.getElementById('like_num').innerHTML = Number($('#like_num').text()) - 1;
document.cookie = 'is_like' + "=" + 'true' + "; max-age=60*60*24"; '/show/' + toString('{{loveletter.pk}}');
document.getElementById('like_num').style.color = "blue";
}
else
{
document.getElementById('like_num').innerHTML = Number($('#like_num').text()) + 1 ;
document.cookie = 'is_like' + "=" + 'false' + "; max-age=60*60*24" ;'/show/' + toString('{{loveletter.pk}}');
document.getElementById('like_num').style.color = "red";
// document.getElementById('like').innerHTML = ' <a class="btn btn-danger" οnclick="like()" id="like">支持过啦</a>'
}
document.cookie = 'like_num' + "=" + getCookie("is_like") + "; max-age=30"; '/show/' + toString('{{loveletter.pk}}');
};
后端也通过cookie判断后储存数据。
if request.COOKIES.get('like_num') == 'true':
# 点赞数加一
elif request.COOKIES.get('like_num') == 'false':
# 点赞数减一
obj.save()
想过删除cookie来组织点赞数在短时间内可以一直加减的问题,效果始终不太满意。
// 判断浏览器是关闭还是刷新
// 设置localStorage的过期时间
var beginTime = 0; //执行onbeforeunload的开始时间
var differTime = 0; //时间差
window.onunload = function () {
differTime = new Date().getTime() - beginTime;
if (differTime <= 5) {
localStorage.clear();
} else {
document.cookie = 'like_num' + "=" + getCookie("is_like") + "; max-age=-1"; '/show/' + toString('{{loveletter.pk}}');
}
};
window.onbeforeunload = function () {
beginTime = new Date().getTime();
console.log(beginTime); // 浏览器开启时间?
};
有大佬有幸路过,希望能给点建议。