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 相关文章推荐
比较简单的一个符合web标准的JS调用flash方法
Nov 29 Javascript
工作中常用到的JS表单验证代码(包括例子)
Nov 11 Javascript
JavaScript中实现异步编程模式的4种方法
Sep 24 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
用Vue.extend构建消息提示组件的方法实例
Aug 08 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
VUE 自定义组件模板的方法详解
Aug 30 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
Sep 12 Javascript
jquery实现烟花效果(面向对象)
Mar 10 jQuery
es6函数之rest参数用法实例分析
Apr 18 Javascript
详解webpack的文件监听实现(热更新)
Sep 11 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.MVC的模板标签系统(五)
2006/09/05 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php猜单词游戏
2015/09/29 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
PHP实现的日历功能示例
2018/09/01 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
2016/06/24 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
Python中DJANGO简单测试实例
2015/05/11 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
python类中super()和__init__()的区别
2016/10/18 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
一百多行python代码实现抢票助手
2018/09/25 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
关于美容院的活动方案
2014/08/14 职场文书
2015新学期开学寄语
2015/02/26 职场文书
求职信范文怎么写
2015/03/19 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis