div实现自适应高度的textarea实现angular双向绑定


Posted in Javascript onJanuary 08, 2017

相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个。

过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row。

如果你也像我一样打算使用textarea,那么很抱歉,你一开始就错了。

textarea不是不可以的,然后我是这样错的。(就是监听scroll 如果出现了,就增加1rows 的高度)然而这样真的很挫

textarea.bind('change','keydown'){
 if(scrollTop > 0 ) {
 textarea.rows += 1
 }
}

正确的打开方式应该是利用 html5 全局属性,然而在ios 移动端中,仅使用contenteditable,是无法获得焦点的,无法进行输入的,因此需要添加use-select属性

<div contenteditable='true' style='-webkit-use-select:text'></div>
//不同浏览器,支持度,和实现方式也有点不一样,android和ios默认webkit内核,所以使用这个够了

在angular中使用可编辑的div:——》 angular的ng-model指令只用于select,input,textarea,不适用于div,所以要进一步封装

/*
* 可编辑的div
* 应用于发表评论中有表情的时候,div中添加img(表情)
* <div contenteditable strp-br='true' style='-webkit-use-select:text'></div>
*/
app.directive('contenteditable', function() {
 return {
 restrict: 'A', 
 require: '?ngModel', 
 link: function(scope, element, attrs, ngModel) {
 if (!ngModel) return; 
 ngModel.$render = function() {
 element.html(ngModel.$viewValue || '');
 };
 element.on('blur keyup change', function() {
 scope.$evalAsync(read);
 });
 read(); // initialize
 function read() {
 var html = element.html();
 if ( attrs.stripBr && html == '<br>' ) { //清除 <br>
  html = '';
 }
 ngModel.$setViewValue(html);
 }
 }
 };
});

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Ext.MessageBox工具类简介
Dec 10 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
javascritp添加url参数将参数加入到url中
Sep 25 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 Javascript
快速搭建React的环境步骤详解
Nov 06 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
vue实现几秒后跳转新页面代码
Sep 09 Javascript
微信小程序实现滚动Tab选项卡
Nov 16 Javascript
JavaScript中日常收集常见的10种错误(推荐)
Jan 08 #Javascript
详解js中==与===的区别
Jan 08 #Javascript
JavaScript 动态三角函数实例详解
Jan 08 #Javascript
你不知道的 javascript【推荐】
Jan 08 #Javascript
js时间控件只显示年月
Jan 08 #Javascript
javascript函数的四种调用模式
Jan 08 #Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 #Javascript
You might like
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
javascript的函数
2007/01/31 Javascript
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
深入理解vue中的$set
2017/06/01 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
python分布式环境下的限流器的示例
2017/10/26 Python
pandas数值计算与排序方法
2018/04/12 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
护理实习自我鉴定
2013/12/14 职场文书
财务主管的岗位职责
2013/12/30 职场文书
银行员工辞职信范文
2014/01/20 职场文书
实习生求职自荐信
2014/02/07 职场文书
分层教学实施方案
2014/03/19 职场文书
电力安全事故反思
2014/04/27 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
React列表栏及购物车组件使用详解
2021/06/28 Javascript
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL