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自动显示最后更新时间
Mar 15 Javascript
javascript+iframe 实现无刷新载入整页的代码
Mar 17 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
Mar 14 Javascript
jquery写个checkbox——类似邮箱全选功能
Mar 19 Javascript
js文件Cookie存取值示例代码
Feb 20 Javascript
JS实现的竖向折叠菜单代码
Oct 21 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
Oct 30 Javascript
fullpage.js全屏滚动插件使用实例
Sep 06 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
JavaScript微信定位功能实现方法
Nov 29 Javascript
今天,小程序正式支持 SVG
Apr 20 Javascript
vuex 实现getter值赋值给vue组件里的data示例
Nov 05 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
php数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
js中的数组对象排序分析
2018/12/11 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
Python实现一个简单的MySQL类
2015/01/07 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
业务主管岗位职责范本
2013/12/25 职场文书
有趣的广告词
2014/03/18 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
村干部培训方案
2014/05/02 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
超市创意活动方案
2014/08/15 职场文书
幸福终点站观后感
2015/06/04 职场文书
关于车尾的标语大全
2015/08/11 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
Python实现智慧校园自动评教全新版
2021/06/18 Python
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server