AngularJS仿苹果滑屏删除控件


Posted in Javascript onJanuary 18, 2016

AngularJs被用来开发单页面应用程序(SPA),利用AJAX调用配合页面的局部刷新,可以减少页面跳转,从而获得更好的用户体验。Angular的ngView及其对应的强大路由机制,是实现SPA应用的核心模块。本文所说的页面切换指的就是这个路由机制,即根据不同的url展示不同的视图。

前端开发中,为了对列表项进行快捷操作,有时就添个按钮来简单实现。但是,有时会发现按钮影响美观,甚至影响列表行的布局。稍在网上搜索无果,而写此仿苹果滑屏删除控件。

依赖项:angularJS、jQuery

测试浏览器:Chrome、IE11、手机浏览器

原先列表项代码:

<div class="row-class" ng-repeat="item in list">
这是整行显示的内容
</div>

开发目标:

<div class="row-class" ng-repeat="item in list" slide-delete text="删除" ondelete="ondelete(item)">
这是整行显示的内容
</div>

首先,要写个angular指令:

myapp.directive('slideDelete', function() {
return {
restrict: 'AE',
scope: {
text: "@",
ondelete: "&"
},
link: function (scope, element, attrs) {
var w = $(element).outerWidth ();//应显示的宽度
var h = $(element).outerHeight();//应显示的高度
//按钮宽度
var btn_w = 60;
//设计按钮:
scope.btn = $('<div style="position:absolute;z-index:5998;right:0;top:0;width:'+btn_w+'px;height:'+h+'px;color:#fff;background-color:#900;text-align:center;padding-top:10px">'+(scope.text||'删除')+'</div>');
//改造行,用一个绝对定位div将内容包裹起来
$(element).contents().wrapAll('<div new_box style="position:absolute;z-index:5999;left:0;top:0;width:'+w+'px;height:'+h+'px;background-color:#fff;"></div>');
//添加按钮:
$(element).css({overflow:"hidden", position:"relative", "z-index":5999}).append(scope.btn)
//滑屏功能
.slideable({
getLeft: function(self){return self.children(":first-child").position().left;},
setLeft: function(self, x){ self.children(":first-child").css({left: x<-btn_w && -btn_w || x<0 && x || 0});},
onslide: function(self, x){
scope.open = x < -btn_w / 2;
self.css("z-index", scope.open && 6001 || 5999);
//背景,点击收起
var bk = $.fixedBackground(6000, scope.open);
scope.open && bk.data("self", self).click(function(){
var self = bk.data("self");
$.fixedBackground(6000, false);
self && self.css("z-index", 5999).children(":first-child").animate({left: 0},100);
});
self.children(":first-child").animate({left: scope.open ? -btn_w : 0},100);
}
})
//按钮事件
scope.btn.click(function(){
scope.ondelete && scope.ondelete();
$.fixedBackground(6000, 1).click();//关闭背景
});
}
};
});

再写个滑屏事件类,当然要兼容鼠标

(function($){
$.fn.slideable = function(options){
var self = this;
self.options = options;
self.left = 0;
self.down = 0;
self.pressed = false;
self.bindobj = options.bindobj || self;
self.bindobj.bind("mousedown",function(event){ onmousedown(self, event); })
self.bindobj.bind("mousemove",function(event){ onmousemove(self, event); })
self.bindobj.bind("mouseup" ,function(event){ onmouseup (self, event); })
self.bindobj[0].addEventListener('touchstart', function(event) { onmousedown(self, {screenX: event.changedTouches[0].pageX}); })
self.bindobj[0].addEventListener('touchmove' , function(event) { onmousemove(self, {screenX: event.changedTouches[0].pageX}); })
self.bindobj[0].addEventListener('touchend' , function(event) { onmouseup (self, {screenX: event.changedTouches[0].pageX}); })
return this;
}
function onmousedown(self, event){
self.down = event.screenX;
self.options.onmousedown && self.options.onmousedown(self);
self.left = self.options.getLeft && self.options.getLeft(self) || 0;
self.pressed = true;
}
function onmousemove(self, event){
self.pressed && self.options.setLeft && self.options.setLeft(self, self.left + event.screenX - self.down);
}
function onmouseup(self, event){
self.pressed = false;
self.left += event.screenX - self.down;
self.options.onslide && self.options.onslide(self, self.left);
}
//背景功能
$.fixedBackground = function(z_index, b_show){
var bk = $('#fixed-background-'+z_index+'');
if(!b_show)return bk && bk.remove();
if(!(bk && bk.length>0)){
bk = $('<div id="fixed-background-'+z_index+'" style="position:fixed;z-index:'+z_index+';left:0;top:0;right:0;bottom:0;background-color:rgba(0,0,0,0)">');
$("body").append(bk);
}
return bk;
}
})(jQuery);

关于上述代码给大家介绍的AngularJS仿苹果滑屏删除控件的相关代码,都是小编测试过的,可以放心安全使用。

Javascript 相关文章推荐
javascript 出生日期和身份证判断大全
Nov 13 Javascript
11款基于Javascript的文件管理器
Oct 25 Javascript
BOM与DOM的区别分析
Oct 26 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
JS写的贪吃蛇游戏(个人练习)
Jul 08 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
jQuery实现仿百度帖吧头部固定导航效果
Aug 07 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
Jan 23 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
Mar 29 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 07 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
Jan 18 #Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 #Javascript
实例详解jQuery表单验证插件validate
Jan 18 #Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 #Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 #Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 #Javascript
轻松实现js图片预览功能
Jan 18 #Javascript
You might like
初学CAKEPHP 基础教程
2009/11/02 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
理解javascript模块化
2016/03/28 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
简短大学毕业感言
2014/01/18 职场文书
奠基仪式主持词
2014/03/20 职场文书
企业法人代表任命书
2014/06/06 职场文书
基于python实现银行管理系统
2021/04/20 Python
python 学习GCN图卷积神经网络
2022/05/11 Python