较复杂js的书写格式
我们看较复杂的js程序最怕结构混乱,一个好的js书写结构,在很大程度上可以减缓阅读的障碍性。
我感觉一个良好的结构要有两点:一是要有一个统一的入口,这样就保证了程序的可阅读性;二是要能够灵活的设置参数,这样就保证了程序的可扩展性。
下面是我在平时写代码时常用到的两种结构,先看第一种结构,示例代码如下:
var scrollElement = {
timer : null,
init : function( options ){
var nowOptions = this.setOptions( options )
this.runSetInterval( nowOptions )
this.hoverElement( nowOptions )
},
setOptions: function(options) {
var defaultOptions = {
"speed" : 1000,//动画效果的步速
"time" : 3000, //定时器时间间隔
"num" : 1,//每次滚动几个元素
"scrollContainer" : null,//要滚动元素的父级元素
"height" : ""//单个滚动元素的高度
}
return $.extend( defaultOptions, options || {} )
},
runSetInterval : function( options ){
this.timer = setInterval(function(){
var scrollContainer = options.scrollContainer
scrollContainer.animate({ "marginTop" : -options.height*options.num }, options.speed, function(){
for( var i =0; i < options.num; i++ ){
scrollContainer.find("li").first().appendTo( scrollContainer )
}
scrollContainer.css( { "marginTop" : 0 } )
})
}, options.time)
},
hoverElement : function( options ){
var me = this
options.scrollContainer.on("mouseenter", "li", function(){
clearInterval( me.timer )
$(this).addClass("cur")
}).on("mouseleave", "li", function(){
me.runSetInterval.call( me, options )
$(this).removeClass("cur")
})
}
}
这是一段实现元素滚动效果的js。init作为统一的程序入口,init函数里面首先进行的是参数的初始化,初始化完成后进行各个功能函数的调用,一目了然。我们在看下初始化参数的函数setOptions,函数里面有一个默认的参数配置,这个函数其实要做的就是把用户设置的参数对象和默认的参数对象整合,生成一个满足用户需求的参数对象,这样就满足了程序的灵活性和可扩展性。
调用时的结构如下:
scrollElement.init({"scrollContainer" : ulNode, "height" : liNodeH, "speed" : 2000 })
另一种代码结构与上种结构本质上差不多,要有统一的入口和保证参数的灵活性,只是实现时用到了prototype。示例代码如下:
var Class = {
create: function() {
return function() { this.initialize.apply(this, arguments) }
}
}
var ClassSelectPage = Class.create()
ClassSelectPage.prototype = {
initialize : function(options){
var me = this
me.setOptions(options)
me.CS = me.initClassSelect() //初始化类目选择组件
me.handleClickTabs() //处理点击tab标签的逻辑
me.handleClickSearchBtn() //处理点击搜索按钮的逻辑
me.handleSearchText() //处理搜索输入框的交互
me.gobackCsBox( $(".J_gobackCsBox") ) //为"您最常使用的分类"中的"请重新选择分类"绑定事件
me.whenCatePathClick( $(".J_commonContent") )//"您最常使用的分类" 其它未选中的分类路径在点击时,也需要进行是否签署协议的处理
me.handleGobtnSubmit() //处理点击下一步,填写产品信息按钮
},
setOptions : function( options ){
this.options = {//初始化设置
tabItems : $(".ind-tab").find(".ind-tab-item"), //tab元素
csItems : $(".cs-contents").find(".cs-item"), //item元素
JsearchContent : $(".J_searchContent"), //盛放搜索出来的类目的容器
defaultSearchValue : "输入产品名称,系统自动为您推荐分类"//$(".J-searchText").val() //查找类目搜索框的默认值
}
$.extend( this.options, options || {} )
},
initClassSelect : function(){...},
handleClickTabs : function(){...},
handleClickSearchBtn : function(){},
.........
}
调用的时候如下:
new ClassSelectPage({…})
较复杂js的书写格式的更多相关文章
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"
Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...
- webstorm的live templates快速编辑功能,让你的css JS代码书写速度飞起来
前言: Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码, 大大提高了HTML/CSS代码编写的速度,比如下面 ...
- JavaScript的书写格式及书写的注意点
JavaScript书写格式: 1.行内样式: 写在标签内部 2.内嵌样式(内联样式) : 写在一对head标签中 3.外链样式: 写在一个单独的.js文件中, 再导入进来 JavaScript书写格 ...
- Java的书写格式,标识符及命名规则,注释
Java的书写格式,标识符及命名规则,注释 1.Java语言的书写格式(约定成俗) 1) 大括号要对齐(左大括号与句尾对其,后面大括号与句头对齐),并且成对写 2) 左大括号前面有空格 3) 遇到左大 ...
- js 生成 yyyy-mm-dd 格式的逼格姿势
关于 js 生成 yyyy-mm-dd 格式,往往都会采取手动拼接,一般不愿意为了小功能而去动用 momentjs 之类的插件. ps: 只分享简单方法,网上有 N 多 dateformat 代码,这 ...
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...
- JS判断上传图片格式是否正确
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- MARK DOWN 书写格式说明
MarkdownPad2 书写格式说明: Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,而MarkdownPad2是其中一种支持M ...
- Python3 configparser值为多行时配置文件书写格式
一.说明 一般而言ini配置文件键值对都是一行就完事了,但有时候我们想配置的值就是由多行组成,这里说明此时配置格式该如何书写. 二.书写格式 如果值为多行,那么在第一行外的后续所有行前加入至少一个空格 ...
随机推荐
- 类似桌面背景壁纸随手指滑动--第三方开源--BackgroundViewPager
Android BackgroundViewPager在github上的项目主页是:https://github.com/MoshDev/BackgroundViewPager 下载下来即可运行
- Android图表
最近需要用到Android里面的折现图,因此在这方面也去做了一些调研.总体发现Android对报表的支持还是非常好的.总体上去研究了两个实现方案,一个是利用Android提供的的AChartEngin ...
- Binder相关
Binder分析 需了解C/S还有管理这些的ServiceManager. 简单来讲你(client)有个包裹(parcel)让快递员(proxy)送到公司(server), 公司(server) ...
- MicrosoftProjectOxford 微软牛津计划
光学字符识别 上传本地图片或者提供一个图片URL,查看光学字符识别的演示. 视觉特征分析 上传本地图片或者提供一个图片URL,查看视觉特征分析的演示. 缩略图 上传本地图片或者提供一个图片URL,查看 ...
- wordpress nginx 开启链接为静态
使用固定连接里的自定义 /%postname%/ 日志标题的缩略版本(日志/页面编辑界面上的日志别名).因此“This Is A Great Post!”在URI中会变成this-is-a-great ...
- mini2440 linuxi2c驱动
#include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #inclu ...
- [vsftp服务]——ftp虚拟用户、权限设置等的实验
搭建ftp服务器,满足以下要求: 1.允许匿名用户登录服务器并下载文件,下载速度设置为最高2MB/s 2.不允许本地用户登录ftp服务器 3.在服务器添加虚拟用户vuser01.vuser02.vus ...
- Linux下安装Firefox以及更新Adobe flash
一直无法舍弃Firefox浏览器,老是提示更新,但包管理器中的版本又不是最新版,只能自己手动安装了(一下是在Ubuntu14.04环境中进行的). 1.去官网下载最新版本 2.进入下载目录,解压文件 ...
- PBOC2.0与3.0的区别
一.PBOC规范颁布的历程 1997年12月,PBOC V1.0 定义了五个方面的事项 电子钱包/电子存折应用(EP,ED) 卡片和终端的接口 卡片本身的技术指标 应用相关的交易流程 终端 ...
- hadoop HA 之 QJM
前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试.文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题.搭建环境过程不重要,重要点 ...