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 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
iis6+javascript Add an Extension File
Jun 13 Javascript
javascript比较文档位置
Apr 08 Javascript
jQuery源码中的chunker 正则过滤符分析
Jul 31 Javascript
Javascript 命名空间模式
Nov 01 Javascript
javascript中expression的用法整理
May 13 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
Jun 27 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
Apr 27 Javascript
Vue-Router基础学习笔记(小结)
Oct 15 Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 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
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
动态添加js事件实现代码
2009/03/12 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python join方法使用详解
2019/07/30 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
这段代码难道不该打印出56吗
2013/02/27 面试题
大学生的四年学习自我评价
2013/12/13 职场文书
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
美容院合作经营协议书
2014/10/10 职场文书
详解MySQL的半同步
2021/04/22 MySQL