angularjs和js中同一个元素上如何实现ng-click(onclick),ng-dblclick(ondblclick)事件

单击,双击事件相信大家应该很了解了,他们可以分别执行自己的事件,但是如果用一个元素的既有单击事件,又有双击事件,这种情况下,该如果实现各自的事件呢?看下面代码:

html代码:

 <button onclick="single(event)" ondblclick="double(event)">按钮</button>

js代码:

var time = 200;
var timeOut = null;

function single(e) {
   clearTimeout(timeOut); // 清除第一个单击事件
   timeOut = setTimeout(function () {
       console.log('单击');
       // 单击事件的代码执行区域
       // ...
   }, time)

};

function double(e) {
   clearTimeout(timeOut); // 清除第二个单击事件
   // console.log('双击')
   // // 双击的代码执行区域
   // // ...
   console.log('双击')
};

主要用到setTimeout事件和清除次事件clearTimeout,首先,正常情况,每次双击会触发两次单击的,因为它不清楚你到底是双击还是单击,所以我们要把双击和单击区分出来,这里用到了一个时间间隔,也就2次单击的时间间隔,如果单击的时间小于我设定的时间,那么我会认为它是个双击,需要把两次的单击事件全部清除掉,看点击事件里面,首先清除了上一个单击事件,当如果单击的时间小于我设定的时间,会进入双击事件里面,在双击事件里面我首先也把上一个单击事件清除,这样就把两次单击事件都清除了!这样就可以区分双击和单击事件!

我实际做的项目中效果是上传pdf文件之后,我单击这个pdf图片是选中这个pdf文件,双击是预览pdf 文件!
我截取部分html代码:

<div ng-class="{'single-file-selected' : $index === ctrl.singleIndex,'multiple-file-selected':file.checked}"
   ng-click="ctrl.selectedFile(file,$index)" ng-dblclick='ctrl.filePreview(file)'
   ng-style="{'background-image': file.fileName===undefined ? none:'url(/file/file/{{file.fileName | deletePdf }}.png)'}">
   <div class="delete-div" ng-click="ctrl.singleDelete($event,file,$index)"
       ng-show='file.fileName && ctrl.singleSelected'>
       <i class="delete-icon"></i>
   </div>
   <i class="icon-multiple"></i>
   <!-- <input type="checkbox" ng-model="file.checked" class="checkboxs"> -->
   <div class="shade" ng-show='file.checked'></div>
</div>

你只需要看到我repeat出来的file 上有个ng-click(选中)和ng-dblclick(预览)
下面是js代码:

/**
* @param {Object} selectedFile 选中文件数据
* @param {Int} index 选中文件index
* @description 单击图片选中文件,再次单击选中的图片则会取消选中
*/
ctrl.selectedFile = function (selectedFile, index) {
   clearTimeout(timeOut); // 清除第一个单击事件
   timeOut = $timeout(function () {
       ctrl.singleSelected ? singleSelectedFun(selectedFileList, ctrl.singleIndex, selectedFile, index) : multipleSelectedFun(selectedFileList, selectedFile, index)
   }, time);
};




//双击图片,文件预览
ctrl.filePreview = function (file) {
   //调用$window.open 打开PDF预览
   clearTimeout(timeOut); // 清除第二个单击事件
   file ? window.open(file.url) : file;
};

好了说到这里都已经说的差不多了,有不正的地方请指正,不胜感激!!欢乐的时光总是过得特别快,又到时候和大家讲拜拜!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值