零JS筆記 | ex基础部分

百度评分


onmouseout时清除,利用cur变量循环,利用onclick来设置cur,如果cur小于0,则不设置,一旦onclick设置了cur值,即发生点击,则out时保持onclick状态
百度评分原理


文字上飘


防止重复点击:

if(obj.b) { return; }
obj.b = !0;
...

中间开始依次两边走原理

5 4 6 3 7 2 8 1 9 0 10

//方案一:
以首个5个基点:
即 num2 = -1 +2 -3 +4 -5 +6....  //中间协助得到下面数的变量;
再利用5,依次相加
num = 5 4 6 3 7 ...//实际要用到的数;

文字上飘



图片点击左右飘走


利用transition
图片点击左右飘走


图片同步与交叉走


图片同步与交叉走


商品价格计算


主要分清作用域名,上面部分在一个循环里,下面则需要整个div查找元素来确定,写在sum()里,确保每次事件都可调用到;
商品价格计算


奇偶选择

Math.floor( i / 8 ) ,则 1-8列里,得到的都为0
Math.floor( i / 8 ) ,则 9-15列里,得到的都为1

i%2 == 0 则为偶数
i%2 == 1 则为奇数

奇偶选择



图片无缝切换原理


<quoteblock>

【】表示当前显示,两张图片需要2个变量 ;<br />
1、页面上总显示2张图片; 【1】 - 1<br />
2、点击--> 瞬间第2张图片地址切换-->整个div向左运动-400   1 - 【2】<br />
3、再次点击--> 时,改变图片地址 2 - 3,瞬间重置div为left:0,这是直接拉回,视觉看不出,最后再次做运动 2 - 【3】<br />
4、所以div总在 -400与0之间<br />
5、连续点击闪动,运动未解决禁止重复点击<br />

</quoteblock>
图片无缝切换原理





图片抖动掉落

    function getArr(index) { //index即为左边的个数
        var arr = []
        arr[0] = index;
        var len = Math.max(index, img.length - 1 - index);//左右两边最大的
        var a = b = index;
        for (var i = 0; i < len; i++) {
            if (a > 0) {
                a--;
                arr.push(a)
            }
            if (b < img.length - 1) {
                b++
                arr.push(b)
            }
        }
        return arr;
    }

//如console.dir(getArr(5))  === >  5 4 6 3 7 2 8 1 9 0

图片掉落

for套for矩形排列

// 5 x 5
    var str = ''
    for (var i = 0; i < 5; i++) {
        for (var j = 0; j < 5; j++) {
            str += '<...top:' + i % 5 * 90 ;left:' + j * 90 .../>'
        }
    }

先抖动再掉落时,按顺序依次落下须使用回调函数外一个变量,内一个变量,否则出问题
图片抖动掉落




多组菜单自动播放


原理:两个变量,控制父级变量inow,控制子级变量num,关系为:1:0,1:1,1:2.....

2:0,2:1,2:2.....等,分别控制,切换为,当num到达最大值是切换到第二级的条件是num = ..length, if里切换inow的值为0,1,2,3.....

多组菜单自动播放

零JQ筆記 | jquery-ui

文件結構:
external/jquery.js
jquery-ui.css
jquery-ui.js
jquery-ui.structure.css :特效、背景、邊框等
jquery-ui.theme.css :佈局 架構:

structure.css + theme.css == jquery-ui.css

包含项:

UI Core :UI核心

Core
Widget
Mouse
Position

Interactions :UI交互

Draggable:拖拽
Droppable :拖动释放
Resizable:改变层大小
Selectable:选择元素,通过鼠标拖动,划过选中
Sortable:排序交互

Widgets :控件

Accordion
Autocomplete
Resizable
...

Effects:UI特效

Effects Core
Blind Effect
Bounce Effect
...
多种效果; http://www.w3cschool.cc/jqueryui/api-easings.html
$('div').animate({'width':'100px'},1000,'特效easeOut...')

jqui里removeClass,与addClass也支持特效;

$('div').removeClass('box',1000,'easeInQuad')

并且也支持颜色

$('#div').animate({'backgroundColor':'blue'},1000)

如:show('blind',1000)

See the Pen VembrW by elmok (@elmok) on CodePen.


<script async src="//assets.codepen.io/assets/embed/ei.js"></script>

直接effect()做一次运动特效;

$('div').effect('linear',1000); 

指定中心点运动方向 direction(left|right|up|down)

$('div').toggle('blind',{direction:'left'},1000)



交互:http://www.w3cschool.cc/try/tryit.php?filename=jqueryui-api-draggable

API分為三部分:1、配置參數;2、方法;3、自定義事件


以draggable為例


1、option/Method

$('#div').draggable({
    axis:'x',
    cursor:'crosshair',
    cursorAt:{left:0,top:0},
    handle:'p'
}) //初始化

//如在以上有初始化狀態的元素下:可有:
$('#div').draggable('destroy')  //銷毀
$('#div').draggable('disable')  //禁用
$('#div').draggable('enable')   //啟用
$('#div').draggable('instance')  //獲取對象
$('#div').draggable('widget')  //获取对像 做组件的链式操作

2、Events自定義事件

$('#div2').draggable({
    axis:'x',
    create: function () {
        alert(1); //一上來初始化調1
    },
    start: function () {
        alert(2); //按下後調2
    }
})

draggable與sortable組合使用: http://jqueryui.com/draggable/#sortable


Mothed方法兩種寫法

//寫法一:
$('div').draggable('destroy')

//傳統寫法二:
var obj = $('div').draggable('instance') //得到組件對象
obj.disable()//對象下調方法 ;

Event自定義事件兩種寫法


//寫法一:
$('#div2').draggable({
    axis:'x',
    create: function () {
        alert(1); //一上來初始化調1
    },
    start: function () {
        alert(2); //按下後調2
    }
})

//寫法二:
$('#div2').on('dragcreate', function () {
    alert(2)
})

refresh

<input type="button" value="add"/>
<div id="div1">
    <p>aaa</p>
    <div>111</div>
    <p>bbb</p>
    <div>222</div>
    <p>ccc</p>
    <div>333</div>
</div>

當add即時增加高度時,必須使用refresh參數才能使用高度自動變高而不是出現滾動條;

$('#div1').accordion() //調用手風琴選項卡方法

$('input').click(function () {
    var html = $('#div1').find('div').first().html()
    $('#div1').find('div').first().html(html+'1 <br />')
    $('#div1').accordion('refresh')
})

UI控件自行查看API



UI核心

选择器
:data()
:focusable()
:tabbable()
方法
disableSelection()
enableSelection()
focus()
scrollParent()
jQuery.ui.keyCode
$('div').slice(0,2).data('name','elmok'); //給選中元素添加外部數據
$('div:data(name)').css('background','red') //使用外部數據設css

$('body').children(':focusable').css('background','red') //獲取有光標的
$('body').children(':tabbable').css('background','red') //獲取能接收tab鍵元素的;

$('div').disableSelection() //禁止選擇
$('div').enableSelection()  //開啟選擇

//1s後激活光標位置
$('input').focus(1000, function () {
    this.style.background = 'red'
}) 

//即父級必須具備滾動條才可選中,不一定要有滾動,但需具備,比如設置overflow:hidden,就不具備了;所以是overflow:auto;
$('p').scrollParent().css('background','red') 


$(document).on('keydown', function (ev) {
    if (ev.keyCode == $.ui.keyCode.ENTER) { // ev.keyCode == 13
        alert('回車')
    }
})

position()

<div id="div1">
    <div id="div2"></div>
</div>
    $(function () {
        $('#div2').position({
            my: 'left bottom', //div2內層基點居中
            at: 'right bottom',//div1外層基點
            of: '#div1'//div1外層指定元素
        })
    })

<h2>Widget Factory</h2>

//比如,創建一個方法:testProgressBar(),調用是使用下面這種形式:

$('#div1').testProgressBar({value: 20});

//所以架子應該是:
$.widget('eonon.testProgressBar'{ //不能直接寫,防止衝突 需要加命名空間;
    options:{},
    _create:function(){}
})

稍微豐富點

    $('#div1').testProgressBar({
        value: 20,ut:'px',color:'red'       //value,ut,color作為配置參數
    });


$.widget('eonon.testProgressBar'{ //不能直接寫,防止衝突 需要加命名空間;
    options:{
              value: 0,
              ut: '%',
              color:'pink'
},
    _create:function(){
            var progress = this.options.value + this.options.ut;
            this.element.html(progress).css('color',this.options.color) //this.element == div1
}
})

$.widget(方法名,json擴展)


http://api.jqueryui.com/mouse/


$.ui.mouse指繼承方法,如果不是自定義事件則可不寫


http://api.jqueryui.com/jQuery.widget/#method-_create


自定義事件作為options參數接收;_create:function(){初始化};_mouseUp:function(){接收}


_mouseUp需要在_create裏初始化this._mouseInit()




$(function () {
    $.widget('eonon.testProgressBar', $.ui.mouse , { //不能直接寫,防止衝突 需要加命名空間;  
        options: { //收集配置參數
            value: 0,
            ut: '%',
            color:'pink',
            customMouseUp: function () {} //自定義事件即作為options的屬性,再使用_mouseUp這個默認up方法調用即可
        },
        _create: function () {
            var progress = this.options.value + this.options.ut;
            this.element.html(progress).css('color',this.options.color) //this.element == div1
            this._mouseInit()
        },
        _setOption: function (a,b) { //進行設置操作時走這裏
            //alert(a) //value
            //alert(b) //80

            if(a == 'value'){
                this.element.html(b+this.options.ut)
            }
        },
        aaa: function () { //共用方法,
            alert('aaa')
        },
       _aaa: function () { //帶下劃線是私有方法,外部找到;
            alert('_aaa')
        },
        _mouseUp: function () {
            //alert('_mouseUp')
            this.element.trigger('m.customMouseup')
            this.options.customMouseUp()
        }
    });

    $('#div1').testProgressBar({
        value: 20,ut:'px',color:'red'//value作為配置參數
        ,customMouseUp: function () { //自定義事件;
            alert('觸發了參數定義的mouseUp')
        }
    });

//調用自定義方法:

    $('#div1').on('m.customMouseup', function () {
        alert('on帶up時觸發')
    })
/*
$('#div1').testProgressBar('aaa') //正常彈出
$('#div1').testProgressBar('_aaa') //無法彈出 ,私有
*/

    })