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 相关文章推荐
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
Mar 05 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
Jun 09 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
Nov 29 Javascript
几种tab切换详解
Feb 03 Javascript
Vue.js展示AJAX数据简单示例讲解
Mar 29 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
Jun 22 Javascript
angular $watch 一个变量的变化(实例讲解)
Aug 02 Javascript
angularJs中$http获取后台数据的实例讲解
Aug 08 Javascript
详解原生JS回到顶部
Mar 25 Javascript
Vue中的this.$options.data()和this.$data用法说明
Jul 26 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注释实例技巧
2008/10/03 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
对Python中gensim库word2vec的使用详解
2018/05/08 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
python pandas 时间日期的处理实现
2019/07/30 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
面向对象设计的原则是什么
2013/02/13 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
木工主管岗位职责
2013/12/08 职场文书
小学生成长感言
2014/01/30 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
新郎婚礼致辞
2015/07/27 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL