五、教你如何搭配 CSS、jQuery 各式各樣的動畫效果
5-24 使用 preventDefault() 取消默認行為
有時想呈現動畫效果,不會用按鈕,會用連結 但連結的預設效果是,會傳送網址 如果不想讓 a 有傳送網址的行為的話 這時就可以用 preventDafult()
來取消預設行為
5-25 preventDefault 程式碼範例
5-26 css() - 教你如何動態載入 CSS style 設定
用 JS 載入的 css 是 inline,權重較高 iice: inline>id>class>element
老師比較喜歡用 remove, add, toggle class 來切換 css 但有些情況可能需要動態的知道瀏覽器寬度多少
jQuery 不同版本 api 有差異
早期版本可用 toggle 切換
在目前 jQuery 3.0 已經沒有惹
jQuery 的鏈式
動畫呈現容易與其他功能衝突
改用 callback 寫法,等前面執行完才執行 callback,這樣就不會有事情惹
5-27 設計下拉式收關選單
滑鼠移動到連結時,會展開往下的選單
第一步驟,先完成滑鼠 hover 後會自動展開
第二步驟,用 js 控制
先在訂單查詢 div 加上 .dropdown
訂單查詢下層的 ul 加上 .dropdown-open
展開訂單查詢的子選單後,想讓訂單查詢按鈕保持藍底的樣式
在 css 控制
.menu a.active
也有背景色用 jQuery 切換 .active
同學提問
滿版設計
原先
要使用絕對定位
如何按其他 menu 時,之前的會收起來
範例
$(this).parent('li').siblings().find('a').siblings('.dropdown-open').slideUp()
滑入滑出效果,可用 mouseenter, mouseleave
如何讓出現的子選單覆蓋在下面的 banner 圖片上
第二層 li 請用相對定位、絕對定位來設計
若有兩層的多個子選單 如何讓 $('.dripdown-open').slideToggole
一次只開出被點選的 .dropdown,而不是全都出來 用 $('this').toggleClass('active')
似乎有用
可以用 next 選擇器
$(this).next('.dropdown-open').slideToggle();
同學使用 mouse
在點擊選單後,如何點擊其他地方達成收起效果
老師說可用 mouseleave (bad)
同學使用 mouseup,可參考
find() 和 children() 有何不同
.find() 是指 在這個範圍內都可進行搜尋,不看階層性。而 children 則是只會選取到當下的「子階層」而已,所以就應時機來使用哩 :D
hover 效果自動關閉選單
Hello shin,我這裡寫了個純 CSS 範例給你參考,因為通常來說 比較少會做click事件,移出hover就自動關閉,
這點比較傾向用 純css直接做hover效果比較單純,如果硬要做就可以,你可以看這裡的 events 區塊,裡面的 mouseout就可以做滑鼠移出的事情哩,但以下拉式選單的案例來說比較麻煩,因為他是li裡面的a連結外又包了 ul,所以以這case來講實作上可能要思考一下,也提供給你參考哩 :D
我的問題
沒有加 clearfix,是因為讓子選單刻意破版嗎
5-28 delay()-延遲動畫效果的好用語法
讓動畫先後呈現 emmet 用 $ 字號可以自動產生流水號 show() 沒有寫內容的話,會直接出現,不理會 delay
為什麼按鈕絕對定位 left:50 了卻沒置中效果
可以先 left:50,給按鈕 width: 100px,再 margin-left: -50px,達到置中效果
CSS 的 transition duration 和 delay 效果
duration 是動畫持續效果,delay 是動畫延遲效果。
delay() 用在 jQuery,剛剛的都是用在 CSS
5-29 即時縮放縮小字型好簡單
點大中小,能即時縮放字型
5-30 fixed 固定網頁內容
彈出視窗、廣告怎麼做 可能固定在左下角
abosolute 在動畫效果常見,可定位在父元素的特定位置
abosolute 和 fixed 的差異
absolute: 只會依照父元素進行定位
fixed:不管在任何位置,永遠訂在網頁上
fixed 也能做固定於右下方,點擊後能回上方的效果?
還有滾動後才出現元件的寫法
5-31 使用 stop() 讓你的動畫效果更華順
希望動畫執行中,能強制開始下一個動畫
是否有能中斷就停在那邊,按鈕後從原本地方再繼續動作
程式碼是什麼意思
```js
$('.animated').click(function(){
$('.box').animate(
{left: '+=600'} // CSS 的位移 600px
, 10000); // 10 秒鐘的動畫時間
});
// 一個按鈕滿足兩個需求 $('.one').click(function(){ if ($('.box').is(':animated')) { // 如果是動畫的狀態 $('.box').stop(); } else { // 除了 if 以外的狀態 $('.box').animate({left: '+=600'}, 10000); } });
可以做出滿版的效果,但我試著把height設定拿掉後,發現它變成沒有滿版了,滿版效果除了設定height之外還有其他方法可以做嗎?
這裡原因是我 .container 沒有清除浮動,導致他高度是 0px,你也可以開啟 chrome 觀察看看,另外一種作法也可以設計如我寫的這個範例,vh 是依照瀏覽器高寬設計的單位,如果寫 100vh ,高度就會以類似 100 % 的單位來延伸,而寬度單位則是 vw 哩 :D
為什麼 .main 設定 width: 100%、.aside 設定 overflow: hidden?
main 設定100% 就是讓他變滿版而已,
當我們點選展開左側選單,自然是要點選選單連結,所以 .main 會被向右推是預期效果,
所以是不用再設定寬度的。
aside 下 overflow 只是老師個人習慣會不習慣內容超出去, 但他並不是主要動畫呈現的 CSS 語法哩!
你已經來過我們的線上問答會嗎? 下禮拜三換我分享,也邀請你來哦,下禮拜一我們就會對外公告報名方式哩~
5-33 Animate.css - 載入第三方插件、增添網頁動畫豐富度
下載、對想要有動畫的元件加入 class
可用 js 導入
要怎麼讓按鈕可以重複點擊,能重複執行動畫效果
先 removeClass 再 addClass 會有 bug
stack overflow 有解法
老師提供範例 animate_test
.one
是什麼one('webkitAnimationEnd oanimationend msAnimationEnd animationend',function(){})
這句語法白話文的意思是「當動畫結束後去執行第二個參數function的內容,且只執行一次」。至於為什麼會有四個,則是依照瀏覽器不同而各別設定,ms 是 ie、o 應該是 opera、webkit 是chrome、safari。.one 則是指執行一次的意思,不會永久綁定,可以再看他的文件補充觀念哦
如何重複動畫效果
測驗四: 第四章測驗
Last updated