再说仿微博的发布与删除

  很久之前闲着没事仿照新浪微博的发布与删除,写过一次代码!那时主要是实现滑动的效果,不过代码却是非常的乱,html与css样式混用等。可是这段代码也没怎么用过,就一直在那扔着。点击查看效果

  直到昨天下午,有一妹子说她想实现那种跟新浪微博似的那种效果,我才想起我原先也写过这个东西,不过因为那时的代码啊有段乱,也就没给妹子推荐。然后晚上回到家后,就把我一年前写的代码重新设计了一下,相对来说结构更加清晰了一些!

  新代码和旧代码都放在一个仓库里,不过这两个没有纠缠。旧代码就一个文件:microblog.html,剩下的全部都是新代码,若不想要旧的代码,删了这个文件就是。

  放上代码地址:github-microblog

  说下这次的重构主要都进行了哪些工作:

  • 更新了jQuery的版本:由1.7.1升级到了1.11.1,同时也废除了live方法,改用on;
  • 把html, css与js进行相互的分离,不再集合到一个文件里;
  • 添加了字数的统计和限制,最多只能输入140个字;
  • 添加了输入框为空或字符超过限制时的提示;
  • 添加了表情的插入

  这次重写也学到了很多的东西,比如CSS3中的animation,字数的限制,表情的添加等。

  点击链接【新的效果页面】,看看重构后的效果。

  1. CSS3中的ANIMATION

  在输入框为空时或者字数超过了限制,输入框就是闪两下进行提示,这是通过CSS3中的animation属性实现的。关于animation更多的介绍,可以参考这个链接,本文就不展开说明了,你可以通过此链接【CSS3的animation】查看animation更多详细的信息与使用,这里简单的介绍下animation的使用:

.send .warning{
    background: #fff;
    -webkit-animation:‘wobble‘ 0.8s ease-in-out;
}
@-webkit-keyframes wobble{
    0%{background: #fff;}
    25%{background: #FFC0CB;}
    50%{background: #fff;}
    75%{background: #FFC0CB;}
    100%{background: #fff;}
}

  animation中的参数分别表示:

  • ‘wobble‘ : 动画的名称,随便定义
  • 0.8s : 动画执行的总时间
  • ease-in-out : 动画执行的方式

  在wobble的结构体里,有很多的百分比数字,这些就是在0.8s里的执行时间里的各个进度,我们可以定义每个当前进度展示怎样的属性。

  定义了样式,还要确定触发点是什么?当用户点击确定“发布”按钮或者使用ctrl+enter组合键时进行信息的校验,如果输入框为空或者字数超过了限制,那么textarea标签就添加warning类,执行完成后再去掉该类名。

timer : null,
warning : function(){
    $("#say").addClass( "warning" );

    this.timer && clearTimeout(this.timer);
    this.timer = setTimeout(function(){
        $("#say").removeClass( "warning" );
    }, 800);
}

  2. 字数的限制

  字数的限制,叫实时显示剩余字数更加确切一些。在这里我是让textarea标签监听keydown事件实现的,这里为什么不选择监听keypress或keyup事件呢?因为:

keypress与keydown事件差不多,keydown是监听按键按下事件,keypress是监听按下与松开事件;但是keypress只能监听单个按键事件,不能监听组合按键。这里使用到了ctrl+enter组合按键提交,因此就不能使用keypress了;关于keydown和keyup,假如在输入英文字符或者数字时,虽然按键一直没有松开,但是一直在进行输入(没有松开按键则表示keydown事件无限执行),那么如果使用keyup事件来计算剩余字数就不准确了。因此最终选择了keydown事件

  每次执行keydown事件时,均获取textarea的值的长度,然后计算出剩余的字数,如果剩余字数为0,则不再让用户进行输入。

  3. 将内容添加到列表中

  参考现在的html结构,每条留言都是一个li标签,因此插入新留言时,也是要插入一个li标签。正常情况下,应该是:

  1. 添加成为ul标签的第一个li标签
  2. 默认隐藏这个刚添加的li标签
  3. 使用slideDown()、fadeIn()等函数显示出来

  可是这里,在我的代码里,有一个很难理解的问题:需要添加的li标签必须添加成为第二个li标签,如果是添加成为第一个li标签,执行显示动画或者删除该留言时,会闪动一下,也不知道为什么? 不知有谁能解决下不?

var $ul = $("#talklist"),
    $one = $(‘<li class="item"><p>‘+word+‘</p><div class="info"><span class="datetime fl">‘+datetime+‘</span><div class="fr"><a class="delBtn" href="javascript:;"">删除</a></div></div></li>‘);

$ul.find(‘.first‘).after($one);    // 添加到第一个标签的后面
$one.hide().slideDown( ‘slow‘ );

  4. 表情的添加

  这一次最大的变化就是能够插入表情了。因为输入框为textarea标签,是不能直接显示html元素的,只能显示文本信息。因此我们换个思路实现,当点击表情图片时,用某个字符表示这个表情。提交后,再把所有的字符转换回表情链接。

  表情的操作主要在js/express.js的文件中,expdata变量中存着所有可以显示的表情图片链接,比如:

‘抠鼻‘:‘./img/express/kbsa_org.gif‘

  当点击表情时,输入框内显示[抠鼻],当用户提交信息后,再把[抠鼻]字符转换为<img src="./img/express/kbsa_org.gif" alt="exp" />,这样就能显示图片了。

  这里还有一个要注意的点:点击表情按钮弹出表情列表层后,点击其他地方也能够关闭这个层,因此需要在body的层级上绑定click事件,来隐藏掉这个表情列表层;不过不是点击body上所有的地方都要隐藏的:一个是表情弹出按钮,一个是表情列表层。我们需要为这两个地方的click事件阻止事件冒泡:e.stopPropagation()

$exp_list.delegate("li", "click", function(e){
    var title = ‘[‘+$(this).attr("title")+‘]‘;
    $("#say").val($("#say").val()+title);

    e.stopPropagation();
});
$("body").not(‘.express, .exp_list‘).on("click", function(e){
    $exp_list.fadeOut();
});

  当然,依然还有很多的地方需要完善呢,期待你们的意见和建议。

  原文地址:http://www.xiabingbao.com/javascript/2015/03/21/imitate-microblog/

时间: 2024-08-09 23:59:49

再说仿微博的发布与删除的相关文章

h5聊天室web端(仿微博、微信)|h5仿微信网页端|仿微信界面弹窗

html5开发的仿微博.微信聊天web端案例,h5仿微信聊天网页版,采用html5+css3+jquery+swiper+wcPop等技术进行布控架构开发,弹窗插件wcPop.js进行了一次全面api升级,修复编辑器插入表情时光标定位错误bug,新增了上传附件及自定义推送内容,另外也新增了个人名片.上传附件.分享等样式,功能上实现了消息.表情的发送,图片.视频全屏预览. 项目运行图: /* --- 用户设置.Start ---*/ // 联系人/群聊切换 $("body").on(&q

仿微博视频边下边播之滑动TableView自动播放-b

Tips:这次的内容分为两篇文章讲述01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器.02.[iOS]仿微博视频边下边播之滑动TableView自动播放 讲述如何实现在tableView中滑动播放视频,并且是流畅,不阻塞线程,没有任何卡顿的实现滑动播放视频.同时也将讲述当tableView滚动时,以什么样的策略,来确定究竟哪一个cell应该播放视频. 上篇文章讲述了封装一个边下边播,并且带有缓存功能的播放器.如果你还没有看,请点击跳转[iOS]仿

关于高仿微信对话列表滑动删除效果代码优化

原文:http://blog.csdn.net/singwhatiwanna/article/details/17515543 最近公司项目需用到微信滑动拉出按钮的效果,发现一位牛人已经实现了相关效果,但控件仍与业务代码存有耦合,于是花了点时间做了些去耦合,并于此进行记录,以防遗忘. 个人认为耦合主要在于两点: 第一点是SlideListView中的onTouchEvent 通过获取item间接得到SlideView,但这样会引入外部数据类MessageItem.          @Overr

仿IPhone 长按图标删除应用,图标抖动效果

仿IPhone 长按图标删除应用,图标抖动效果 使用ValueAnimator类实现,长点击图标,图标抖动的效果,可以自己规定抖动的程度大小. 由于Animator类是在android3.0之后才加上去的,所以,为了兼容3.0以下的机子,就导入了nineoldandroid.jar包,实现兼容. 工程源代码: 点击下载 仿IPhone 长按图标删除应用,图标抖动效果

java高仿微博日期显示格式化,日期辅助工具类

原文:java高仿微博日期显示格式化,日期辅助工具类 源代码下载地址:http://www.zuidaima.com/share/1550463377902592.htm 仿新浪微博日期格式化工具类: 例如: 1. 刚刚 2. xx分钟前 3. hh小时前 4. 今天 HH:mm 5. 昨天 HH:mm 6. 前天 HH:mm 7. 上个月 yyyy-MM-dd HH:mm 8. 去年 yyyy-MM-dd HH:mm 9. 前年 yyyy-MM-dd HH:mm 今天写的代码,结构还很粗糙,只

javascript 信息的发布与删除

现在很多类似以微博发布动态的效果,下面为一个用 JavaScript写的小小的类似微博发布信息的案例 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>微博发布</title> 6 <style type="text/css"> 7 8 *{ 9 padd

新闻系统(发布,删除,修改)

1.登录表单及验证 <form action="login.php" method="post"> 用户名:<input type="text" name="uname"/> <br> 密 码:<input type="password" name="pwd"/> <br> <input type="submit

高仿SinaWeibo新浪微博发布页面话题效果

最近做了一个仿新浪微博话题效果的功能,网上搜索了几个效果,都存在一定问题,最终借鉴别人的思路,完成这一套效果. 首先,我们拆分逻辑以及开发顺序. 1,实现话题变色效果 2,实现插入话题效果 3,实现话题选中删除效果 4,实现点击话题,光标在话题之后 下面我们就一步一步实现效果. 一,实现话题变色 实现逻辑主要是通过EditText的addTextChangedListener()来进行监听文本变动,通过正则表达式来匹配出文本中的话题. 利用正则表达式获取全部话题: //正则表达式,一定要和服务器

高仿微信对话列表滑动删除效果(转)

前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因此会有滑动冲突,也许你需要了解下android中点击事件的派发流程,请参考Android源码分析-点击事件派发机制.我的解决思路是这样的:重写ListView的onInterceptTouchEvent方法,在move的时候做判断,如果是左右滑动就返回false,否则返