九宫格,也叫做快速拨号(Speed dial),是现代浏览器一个非常重要的功能,用户可以在空白页上定制和放置自己喜爱的网站,这样可以方便的打开所需的网站,无需输入和记忆网址。

九宫格页面一般由9个格子到16格子组成,每个格子可以自由的拖动以交换位置。下面我们来实现一个简单的3*3九宫格。

我们先定义一个容器来放置3*3个格子,定义它的宽度为3个格子的宽度之和再加中间的间距。然后在上面放置9个浮动的格子。

为格子添加一些表现效果:

background: -webkit-gradient(linear, 0% 0, 0% 100%, from(rgba(255, 255, 255, 0.75)), to(rgba(222, 231, 233, 0.7))); /*半透明渐变背景*/

border: 1px rgba(0, 0, 0, 0.24) solid; /*半透明边框*/

-webkit-border-radius: 3px; /*边框圆角*/

box-sizing: border-box; /*盒子模型*/

-webkit-box-shadow: rgba(0, 0, 0, 0.25) 0px 1px 7px;/*盒阴影*/

效果如下图所示:

设置透明度的原因是可以为九宫格添加背景设置功能,如下图所示:

下面为格子添加hover效果,我们可以利用jQuery的animate API为hover效果添加淡入淡出的支持。淡入淡出的原理是让hover的效果绑定在一个容器上,这个容器和格子完全重叠,在鼠标mouseover时让这个容器的透明度从0变为1,mouseout时透明度从1变为0。核心代码如下:

$('.hover', this).stop().animate({

'opacity': 0

}, 150);

然后初始化一些数据。

下面我们来实现最重要的拖拽功能。jQuery的插件jQuery UI提供了元素拖拽和排序的支持,可以极大的减少我们的工作量。

$('#start-nine-box').sortable({

zIndex: 30, //拖拽总在最上

revert: true, //拖拽的元素未排序时放置后平滑回到原位置

});

这样可以很方便的实现九宫格的位置交换功能,但是带来一个问题。拖拽交换序号为6和9的格子后如下图所示:

6移到9的位置后,7、8、9格子都向前移动了一位,而不是6和9进行交换。使用原生的sortable函数带来的排序是填位排序,而不是交换排序。所以我们不能直接使用sortable函数,我们考虑使用控制拖拽的draggable和控制拖放的droppable函数实现。

首先设定拖拽。

$(selector).draggable({

zIndex: 30, //拖拽总在最上

revert: true, //拖拽的元素未排序时放置后平滑回到原位置

containment: 'window'

});

然后设定拖放:

$(selector).droppable({

drop: function(event, ui) { //拖拽放下时

var dropElement = $(this).get(0); // drop element

var dragElement = ui.draggable[0]; // drag element

},

});

交换排序的处理可以有很多方式,最简单的一种是完全交换两个元素的内容:

//交换两个元素的内容

var dropElementHTML = dropElement.outerHTML;

var dragElementHTML = dragElement.outerHTML;

dropElement.outerHTML = dragElementHTML;

dragElement.outerHTML = dropElementHTML;

这样会造成一个问题,绑定在元素上的所有事件都会失效,包括draggable和droppable事件,所以需要重新绑定。

setDroppable('#' + dropElementId + ', #' + dragElementId); //重用上面的方法

最后还可以添加一些界面效果来让九宫格更加完美,例如拖动格子hover时的界面提示,我们可以让下层的drop元素有一个颜色淡入淡出的效果,只需在droppable的over和out事件里设定相应的处理。

over: function(event, ui) { //拖到元素上时

$(this).stop().animate({

'opacity': 0.5

}, 150); //设置drop的opacity

},

out: function(event, ui) { //拖出元素时

$(this).stop().animate({

'opacity': 1

}, 150); //设置drop的opacity

},

效果如下:

如此我们实现了一个简单的九宫格,不过剩下还需要考虑很多细节问题,例如格子的resize,编辑功能。

另外作为浏览器默认页面的九宫格是必须要进行性能测试和优化的,尽可能的减少加载时间和提高响应速度,这个和浏览器的交互都不在本文的讨论范围之内,会在后面的文章里阐述。

java实现九宫格_浏览器九宫格的简单实现相关推荐

  1. java 数据对_数据表与简单java类(一对多)

    emp表:empno,ename,job,sal,comm,mgr,deptno dept表:deptno,dname,loc 要求可以通过程序描述出如下对应关系 一个部门有多个部员,并且可以输出一个 ...

  2. java吸血鬼数字_吸血鬼数字的简单实现

    从think in java上面看到的吸血鬼数字,自己写了一个简单的实现 package com.zyl; import java.util.ArrayList; import java.util.A ...

  3. java番茄钟_个人用的简单番茄时钟

    虽然网上有很多各种各样的番茄时钟,但是我只需要最简单的半小时间隔进行全屏提醒就可以了.但是找来找去,只有一个 daping 软件能够满足我的基本要求,可惜这个软件有广告. 所以为了满足需求,只能动手自 ...

  4. java 加法程序_使用JAVAEE编写简单的加法程序

    软件152  罗俊 首先选择菜单file-new-maven project,勾选"Create a &simple project (skip archetype selectio ...

  5. java 多线程 从无到有_多线程断点续传(简单demo)——从无到有

    复杂功能总是由许多小功能组合在一起完成的,一步一步完成多线程断点续传,可以从以下几个方面来考虑. 第一,实现简单的下载: 第二,打断下载线程,实现暂停功能: 第三,从已经下载点进行续传: 第四,引入多 ...

  6. java识别雨滴_如何实现一个简单的雨滴动画?手把手告诉你

    本文由云+社区发表 目的 写了几个Flutter的demo,但是对Flutter的自定义view和动画都不太了解,看到一个类似效果在android的实现,就尝试用Flutter做一下.同时也是学习Fl ...

  7. linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...

    需求 做嵌入式设备,需求九宫格图片资源浏览器: 1.设置根目录: 2.可拖动: 3.可设置列数与行数: 4.点击文件夹可以进入文件夹: 5.点击图片可以浏览图片: 6.支持触摸屏上下拽拖浏览: 7.支 ...

  8. 2345王牌浏览器九宫格个性化设置

    核心提示:2345王牌浏览器九宫格中的每个小窗体显示的网址,都可以进行个性化定制. 2345王牌浏览器九宫格中的每个小窗体显示的网址,都可以进行个性化定制.可以单击 2345王牌浏览器九宫格个性化设置 ...

  9. Java代码制作ie浏览器_[Java教程]判断IE浏览器代码实例

    [Java教程]判断IE浏览器代码实例 0 2015-08-12 01:00:19 判断IE浏览器代码实例: 由于当下浏览器类型众多,并且对同一段代码的解读有时候各有不同,所以要根据浏览器的类型来执行 ...

最新文章

  1. python -- plt图表
  2. c++ 函数指针_开发经验分享(5) 修改Makefile实现C/C++混合编程
  3. c#中对Cross-thread operation not valid错误的处理办法
  4. 小米运动蓝牙耳机重新配对_为运动而生,韶音AS660骨传导蓝牙耳机体验
  5. ROS系统的安装 ubuntu 18.04.5 LTS
  6. poj 2392 dp 不是很懂哎!!!Space Elevator
  7. 亲戚再也看不见我一个人食吉野家了
  8. Apache Storm 官方文档 —— 源码组织结构
  9. Android开发面试题之遍历ViewGroup拿到所有的ViewGroup和View的id
  10. SensorKernel层框架分析
  11. Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解
  12. Navicat常用快捷键
  13. ajax点击a load,jQuery:在ajax load()之后运行脚本
  14. 华为性格测试通关指南
  15. php批量检测网站状态_PHP实现批量检测网站是否能够正常打开的方法
  16. html img标签alt属性吗,img标签可以不用alt属性吗
  17. 分享200个App移动端模板
  18. MySQL数据库安全
  19. Mysql分组取每组排序后第一个
  20. 使用x-switch进行代理

热门文章

  1. 科技查新的新颖性是指什么?
  2. 值得买科技发布2022年三季报 企业将如何引领消费行业的下一个周期
  3. ESP8266-Arduino网络编程实例-ESP-Now点对点双向通信(Two Way)
  4. [论文阅读] 《Compiling ONNX Neural Network Models Using MLIR》
  5. 数学纠错本html模板,小学数学错题纠错本(打印版).docx
  6. 打造一款语音菜谱软件,人人都能是大厨!
  7. Redis 手摸手教程(番外篇)Redis在电商系统中的使用场景及问题分析
  8. C#拼音码代码源代码GetSpellCode
  9. EKF-GSF 偏航估计器
  10. 《c语言入门题目4》用c语言计算圆环的面积