较复杂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配置文件键值对都是一行就完事了,但有时候我们想配置的值就是由多行组成,这里说明此时配置格式该如何书写. 二.书写格式 如果值为多行,那么在第一行外的后续所有行前加入至少一个空格 ...
随机推荐
- jquery实现radio按纽全不选和checkbox全选的实例
用jquery实现以下两个这个功能: 1.对所有单选按纽中radio全不选 单选按纽:<input type="radio" name="f1">A ...
- 记录C++学习历程
从今天开始学习C++,将学习中遇到的问题,以及解决方案记录在这个博客里. 函数 1.C++函数声明(原型) 函数原型跟函数的定义在返回值类型,函数名,参数上必须完全一致. 2.程序的内存区域:全局数据 ...
- C#发送邮件源码
介绍 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/IP协议 ...
- django-url调度器-初级篇
Django 遵从 MVC 模型,并将其特色化为 MTV 模型.模型的核心是通过用户访问的 url 来指向处理的函数,而函数处理后返回相应的结果.所以url决定了用户访问的入口,另外表单处理的提交地址 ...
- python的pip和virtualenv使用心得
pip可以很方便的安装.卸载和管理Python的包.virtualenv则可以建立多个独立的虚拟环境,各个环境中拥有自己的python解释器和各自的package包,互不影响.pip和virtuale ...
- python中的多继承
python和C++一样,支持多继承.概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性. class P1 #( ...
- SQL Server中查询用户的对象权限和角色的方法
--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...
- 条款21:必须返回对象object时,不要返回其引用reference
如下为一个有理数类,其中包含一个用来计算乘积的函数: #include <iostream> using namespace std; class Rational { public: R ...
- UIImageView swift
// // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...
- OC-通讯录
要求描述:用OC语言完成简易通讯录(实现增删改查)功能.(注:使用MRC) 1.创建AddressBook类. 1)使用字典作为容器,字典的Key值为分组名(姓名首字母),value值为数组,数组中存 ...