摘要:实现了搜索这一功能,接下来就是要把这一部分嵌入到一个平台,因此我开始接触编程以及前端。之前我对前端几乎没有什么了解,因此这一周除了体检被检查出来早搏参加入学典礼之外,就是在琢磨,,了,并结合需求开发了网站的一部分。
今年暑假大部分时间是在要学校,前一阶段一直在学习Scala和理解Spark,但是苦于没有实际上手的项目,尽管看了不少论文和书,但不敢说自己理解的有多深刻,所以我打算暂时搁置这一部分的内容。后一阶段是出于导师的需要要解决针对海量数据进行频繁的模糊搜索带来的性能问题,其实一些关系型数据库比如MySQL有自带的Full Index,但是它们并不能很好的支持中文,于是我开始尝试使用Elasticsearch来解决问题。当然如果我使用Elasticsearch就意味着引人了第三方的工具,因此数据同步的问题就凸显出来。关于数据同步,elasticsearch-jdbc可以将MySQL中的数据同步到Elasticsearch,但是使用后我发现elasticsearch-jdbc存在两个严重的问题:一是elasticsearch-jdbc只适合数据库中的数据只增不减、不修改的情况,这显然是不合理的;二是当我同步的数据量很大时,elasticsearch-jdbc并不能很完整的导入数据,因此我只能自己实现数据同步,整个过程走了一些弯路,直到后来利用bulk index来批量建立索引和批量删除,同步的效率提高了20+倍,基本满足了性能要求。
实现了搜索这一功能,接下来就是要把这一部分嵌入到一个平台,因此我开始接触Web编程以及前端。之前我对前端几乎没有什么了解,因此这一周除了体检(被检查出来早搏)、参加入学典礼之外,就是在琢磨css,JavaScript,jQuery了,并结合需求开发了网站的一部分。
效果简介整个过程中,比较有意思的是实现弹出层的效果,弹出层在我们日常浏览网页的时候十分普遍,它具有更好的交互效果。如下是实现的效果图。
静态页面实现实现弹出层效果的css代码如下。
#mask { background: #000; opacity: 0.75; filter: alpha(opacity = 75); height: 1000px; width: 100%; position: absolute; left: 0; top: 0; z-index: 1000; /* 层级 */ }
有两点需要注意:
opacity: 0.75;为设置遮罩层的透明度,但是IE不认opacity,所以还需要跟IE做下兼容:filter: alpha(opacity = 75);这里的0.75和75都代表透明度为75%。
对于一层,它不仅只有X轴和Y轴,还有Z轴,也就是层级,z-index就是用来描述层级,它的数字越大,说明层级越高,所处的位置越上。
接下来就是实现弹出界面,Elasticsearch的模糊搜索功能将用在此处,弹出界面的html以及css代码如下(存在命名不规范的情况)。
JS实现动态效果
序号 清单编码 清单名称 项目特征描述 单位 工程名称 标杆类型 图集名称 图集代码 选择
实际上,上面的html并不是预先就已经存在的(css是预先写好的),而是当我触发相应的事件后动态生成的,也就是在原有的页面后追加遮罩层和弹出层。利用JavaScript来实现动态效果,代码如下:
function queryItems() { var oMask = document.createElement("div"); oMask.id = "mask"; // 获取页面的高度和宽度 var sHeight = document.documentElement.scrollHeight; var sWidth = document.documentElement.scrollWidth; // 获取页面的可视高度和宽度 // 如果页面是竖向的页面,那么可视宽度和页面宽度是相等的 var wHeight = document.documentElement.clientHeight; oMask.style.height = 768 + "px"; oMask.style.width = sWidth + "px"; document.body.appendChild(oMask); var queryItems = document.createElement("div"); queryItems.id = "queryItems"; queryItems.innerHTML = "" + "" + "" + "" + "" + ""; document.body.appendChild(queryItems); var dHeight = queryItems.offsetHeight; var dWidth = queryItems.offsetWidth; queryItems.style.left = (sWidth - dWidth) / 2 + "px"; queryItems.style.top = (wHeight - dHeight) / 2 + "px"; var oClose = document.getElementById("queryItemsClose"); oMask.onclick = oClose.onclick = function() { // 关闭弹出框 document.body.removeChild(oMask); document.body.removeChild(queryItems); } }" + "" + "" + " " + "" + " " + "" + " " + "" + " " + "" + "" + "" + "" + "
" + "" + " " + "序号 清单编码 清单名称 " + "项目特征描述 单位 工程名称 " + "标杆类型 图集名称 图集代码 " + "选择 " + "" + "" + " " + "
需要注意的有如下几点:
在页面中创建元素结点:
var oMask = document.createElement("div");
遮罩层需要多大?因此需要获取页面的高度和宽度,要注意的是这是网页的高度和宽度,而不是屏幕的高度和宽度。然后就是把获取到的高度和宽度赋给遮罩层(oMask),因为我的实际页面高度小于屏幕高度,为了让遮罩层铺满全屏于是将sHeight的值定义为768px,不要忘了加上单位px。
var sHeight = document.documentElement.scrollHeight; var sWidth = document.documentElement.scrollWidth; oMask.style.height = 768 + "px"; oMask.style.width = sWidth + "px";
如果仅仅是这样新创建的结点还只是停留在JS里面,要把结点插入到文档中,需要执行:
document.body.appendChild(oMask);
可视区域是真用户正看到的区域的大小,其中可视区域的宽度和页面的宽度相同(大部分网页都是竖着浏览的),获取可视区域高度的代码如下:
var wHeight = document.documentElement.clientHeight;
在插入遮罩层之后,我们采用相同的方法插入弹出层,如何让弹出层出在屏幕的正中央?我们需要获取弹出层的高度和宽度,利用可视区域的高度和宽度,以及弹出层的高度和宽度,最终确定弹出层的定位。
var dHeight = queryItems.offsetHeight; var dWidth = queryItems.offsetWidth; queryItems.style.left = (sWidth - dWidth) / 2 + "px"; queryItems.style.top = (wHeight - dHeight) / 2 + "px";
设置弹出层关闭:可以点击弹出层的右上角,或者是点击遮罩层,设置onclick事件即可:
var oClose = document.getElementById("queryItemsClose"); oMask.onclick = oClose.onclick = function() { // 关闭弹出框 document.body.removeChild(oMask); document.body.removeChild(queryItems); }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85997.html
摘要:如何解决不同终端的适配问题弹性盒子,非常不错的选择的运行流程生命周期生命周期优化解释中虚拟存在的好处为什么可以解决跨域问题地址栏输入流程总结初级阶段是会用。 前几天也是有人问我的一些问题,我觉得还是挺有了解价值的,也是一些平时开发可能比较会忽略的问题。别的不多说,直接开门见山: 1.post和get的区别? 我们都知道GET和POST是HTTP请求的两种基本方法。我相信如果有人问到你这...
摘要:如何解决不同终端的适配问题弹性盒子,非常不错的选择的运行流程生命周期生命周期优化解释中虚拟存在的好处为什么可以解决跨域问题地址栏输入流程总结初级阶段是会用。 前几天也是有人问我的一些问题,我觉得还是挺有了解价值的,也是一些平时开发可能比较会忽略的问题。别的不多说,直接开门见山: 1.post和get的区别? 我们都知道GET和POST是HTTP请求的两种基本方法。我相信如果有人问到你这...
摘要:如何解决不同终端的适配问题弹性盒子,非常不错的选择的运行流程生命周期生命周期优化解释中虚拟存在的好处为什么可以解决跨域问题地址栏输入流程总结初级阶段是会用。 前几天也是有人问我的一些问题,我觉得还是挺有了解价值的,也是一些平时开发可能比较会忽略的问题。别的不多说,直接开门见山: 1.post和get的区别? 我们都知道GET和POST是HTTP请求的两种基本方法。我相信如果有人问到你这...
摘要:前端日报精选译高阶函数利用和来编写更易维护的代码,从入门到放弃响应式编程入门行的电梯调度模拟器个人分享前端学习资源分享中文周刊技术周刊期知乎专栏中的内置方法知乎专栏中的柯里化前端大宝剑小结常见知识依赖收集掘金项目主域重 2017-08-28 前端日报 精选 【译】高阶函数:利用Filter、Map和Reduce来编写更易维护的代码Webpack 3,从入门到放弃响应式编程入门:50 行...
阅读 2911·2021-11-23 09:51
阅读 987·2021-09-26 09:55
阅读 3861·2021-09-22 14:58
阅读 1355·2021-09-08 09:35
阅读 1054·2021-08-26 14:16
阅读 863·2019-08-23 18:17
阅读 2008·2019-08-23 16:45
阅读 682·2019-08-23 15:55