完美实现仿QQ空间评论回复特效


Posted in Javascript onMay 06, 2015

评论回复是个很常见的东西,但是各大网站实现的方式却不尽相同。大体上有两种方式

1.

完美实现仿QQ空间评论回复特效

像优酷这种最常见,在输入框中@要回复的人,这种方式下,用户可以修改@。

新浪微博则是在这个基础上,弹出好友菜单。这种方式的好处是不需要任何js,css处理兼容。

完美实现仿QQ空间评论回复特效

2.

完美实现仿QQ空间评论回复特效

像qq空间这种,对回复的人整个删除。本?鸥芯跽庵址绞奖冉虾茫??庵址绞接行┘嫒菪陨系南附冢?飧龊竺婊嵯晗杆得鳌?/p>

事实上,qq空间的这种实现在效果上是兼容了ie和现代浏览器的,做的非常好。上面是chrome

ie8

完美实现仿QQ空间评论回复特效

ie7

完美实现仿QQ空间评论回复特效

ie6就不上图片了,太卡了,都懂得,最后本?呕岣缴献钪绽?拥模?比灰布嫒?e6。

下面就说说怎么实现的。

先看看qq空间是怎么做的

chrome

完美实现仿QQ空间评论回复特效

上面可以看到,qq空间是在button中加上文字,这样在删除的时候对被回复的用户名就能整个删除了。

不过这样做还不够,首先是样式,需要把button设置成inline-block,

消除button默认的透明背景,边框,当然还有padding,margin设为0

button{ border: 0; background:none; }

这时在ie6,7中插入会发现,似乎还存在padding,而且还很大

完美实现仿QQ空间评论回复特效

完美实现仿QQ空间评论回复特效

所以还需要加上overflow: visible;

另外属性contenteditable设置成为false,否则光标会跳到button里面,

然后在ie8下会发现,输入的时候如果有回车,然后在依次删除的过程中,会发现button标签删不掉,光标会跑到button标签前面,而且再次按右光标键或用鼠标点击button标签右边都无法让光标跑到button标签右边。事实上,qq空间在ie8中也有这个问题

ie8

完美实现仿QQ空间评论回复特效

而在ie6,7下,就没有这个问题

ie7

完美实现仿QQ空间评论回复特效

ie6

完美实现仿QQ空间评论回复特效

这里针对ie8需要对文本框绑定keydown事件回调check_comment,对ie6,7绑定了也没有问题,这里就统一的对ie绑定。

function getPositionForTextArea(ctrl) { //获取光标位置
      var CaretPos = 0; 
      if(document.selection) {
        ctrl.focus(); 
        var Sel = document.selection.createRange(); 
        var Sel2 = Sel.duplicate(); 
        Sel2.moveToElementText(ctrl); 
        var CaretPos = -1; 
        while(Sel2.inRange(Sel)){ 
          Sel2.moveStart('character'); 
          CaretPos++; 
        } 
      }else if(ctrl.selectionStart || ctrl.selectionStart == '0'){
        CaretPos = ctrl.selectionStart; 
      } 
      return (CaretPos); 
    }
      vm.check_comment=function(e,i){
        var a=getPositionForTextArea($('reply'+i));
        if(e.keyCode==8&&a<3){
          var pat = new RegExp("^<p><button .*?>.*?</button> </p>$",'i');
          if(pat.test(this.innerHTML))
            this.innerHTML='';
        }
      };

光标位置<3表明光标前面就是button标签了,这时就可以清空输入框了。注意这里为了严谨,用正则表达式验证是不是button标签.

另外在正则表达式中button标签外包裹p标签,是因为ie在按回车换行时,会默认自动对前面的行包裹p标签。当然,一开始在输入框也要在button标签外包裹p标签。

完美实现仿QQ空间评论回复特效

题外话

qq空间在ff上用的是img标签

完美实现仿QQ空间评论回复特效

之前一直以为qq空间在现代浏览器上统一用的是img标签,写的时候才发现在chrome中用的是button标签,于是就在chrome下试了一下插入img标签,发现怎么也弄不掉边框,而且删除的时候,绑定中光标位置的判断也会和ie不一致,因为现代浏览器换行默认插入<br>,于是索性对chrome也用button标签。

另外在我的例子中,ff中插入button标签的话,输入框不容易获得焦点。本?乓怖恋萌ジ牧?仍然是在ff中插入img标签,对应的keydown回调

if(!!-[1,]&&e.keyCode==8&&$('reply'+i).childNodes.length==2){//ff
          this.innerHTML='';
          return;
        }

只用判断输入框的子节点个数就可以了。

最终效果

chrome

完美实现仿QQ空间评论回复特效

ff

完美实现仿QQ空间评论回复特效

ie8

完美实现仿QQ空间评论回复特效

ie7

完美实现仿QQ空间评论回复特效

ie6

完美实现仿QQ空间评论回复特效

附上例子下载

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
Apr 27 Javascript
JQuery从头学起第三讲
Jul 06 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
Jun 25 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
Oct 23 Javascript
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
JS获取图片lowsrc属性的方法
Apr 01 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
小程序如何构建骨架屏
May 29 Javascript
JavaScript进阶(三)闭包原理与用法详解
May 09 Javascript
vue使用swiper实现左右滑动切换图片
Oct 16 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
May 06 #Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 #Javascript
JS实现CheckBox复选框全选全不选功能
May 06 #Javascript
javascript使用avalon绑定实现checkbox全选
May 06 #Javascript
js实现滑动触屏事件监听的方法
May 05 #Javascript
JS根据生日算年龄的方法
May 05 #Javascript
js改变Iframe中Src的方法
May 05 #Javascript
You might like
PHP 反向排序和随机排序代码
2010/06/30 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python字符串格式化
2015/06/15 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
微信小程序python用户认证的实现
2019/07/29 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
长辈证婚人证婚词
2014/01/09 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
2014年个人委托书范本
2014/10/13 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
导游词范文
2015/02/13 职场文书
幼师辞职信范文
2015/02/27 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL
SQL Server使用导出向导功能
2022/04/08 SQL Server