摘要:使用場景代碼復用和抽象的主要形式是組件當需要對普通元素進行底層操作,此時就會用到自定義指令但是,對于大幅度的變動,還是應該使用組件鉤子函數詳情查閱文檔示例輸入框自動聚焦注冊一個全局自定義指令當被綁定的元素插入到中時聚焦元素下拉菜單點擊
1. 使用場景
代碼復用和抽象的主要形式是組件
當需要對普通 DOM 元素進行底層操作,此時就會用到自定義指令
但是,對于大幅度的 DOM 變動,還是應該使用組件
2. 鉤子函數詳情查閱文檔 https://cn.vuejs.org/v2/guide/custom-directive.html#%E9%92%A9%E5%AD%90%E5%87%BD%E6%95%B0
3. 示例 3.1 輸入框自動聚焦// 注冊一個全局自定義指令 `v-focus` Vue.directive("focus", { // 當被綁定的元素插入到 DOM 中時 inserted: function (el) { // 聚焦元素 el.focus() } })3.2 下拉菜單
點擊下拉菜單本身不會隱藏菜單
點擊下拉菜單以外的區域隱藏菜單
Vue.directive("clickoutside", { bind(el, binding) { function documentHandler(e) { if (el.contains(e.target)) { return false } if (binding.expression) { binding.value(e) } } el.__vueMenuHandler__ = documentHandler document.addEventListener("click", el.__vueMenuHandler__) }, unbind(el) { document.removeEventListener("click", el.__vueMenuHandler__) delete el.__vueMenuHandler__ } }) new Vue({ el: "#app", data: { show: false }, methods: { handleHide() { this.show = false } } })
3.3 相對時間轉換
類似微博、朋友圈發布動態后的相對時間,比如剛剛、兩分鐘前等等
new Vue({ el: "#app", data: { time: 1565753400000 } }) Vue.directive("relativeTime", { bind(el, binding) { // Time.getFormatTime() 方法,自行補充 el.innerHTML = Time.getFormatTime(binding.value) el.__timeout__ = setInterval(() => { el.innerHTML = Time.getFormatTime(binding.value) }, 6000) }, unbind(el) { clearInterval(el.innerHTML) delete el.__timeout__ } })3.4 滾動動畫
Scroll me
Lorem ipsum dolor sit amet, consectetur adipisicing elit. A atque amet harum aut ab veritatis earum porro praesentium ut corporis. Quasi provident dolorem officia iure fugiat, eius mollitia sequi quisquam.
Vue.directive("scroll", { inserted: function(el, binding) { let f = function(evt) { if (binding.value(evt, el)) { window.removeEventListener("scroll", f) } } window.addEventListener("scroll", f) } }) // main app new Vue({ el: "#app", methods: { handleScroll: function(evt, el) { if (window.scrollY > 50) { TweenMax.to(el, 1.5, { y: -10, opacity: 1, ease: Sine.easeOut }) } return window.scrollY > 100 } } })
body { font-family: "Abhaya Libre", Times, serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; background: #000; color: #fff; overflow-x: hidden; } h1, h2, h3, h4 { font-family: "Fira Sans", Helvetica, Arial, sans-serif; font-weight: 800; } .centered { margin: 0 auto; display: table; font-size: 60px; margin-top: 100px; } .box { border: 1px solid rgba(255, 255, 255, 0.5); padding: 8px 20px; line-height: 1.3em; opacity: 0; color: white; width: 200px; margin: 0 auto; margin-top: 30px; transform: translateZ(0); perspective: 1000px; backface-visibility: hidden; background: rgba(255, 255, 255, 0.1); } #app { height: 2000px; }4. 參考資料
《Vue.js 實戰》 作者:梁灝
【譯】vue 自定義指令的魅力
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106790.html
摘要:具體步驟實現將需要的數據對象進行遞歸遍歷,包括子屬性對象的屬性,都加上和。綜上,在性能上的收益并不是最主要的,更重要的是它使得具備了現代框架應有的高級特性。 原文:你應該要知道的Vue.js 組件data為什么必須是函數? 因為組件可能被多處使用,但他們的data是私有的,所以每個組件都要return一個新的data對象 組件通信 父子組件通信:$on、$emit 非父子組件的通信...
摘要:注意此處獲取的數據是更新后的數據,但是獲取頁面中的元素是更新之前的鉤子函數說明組件已經更新,所以你現在可以執行依賴于的操作。鉤子函數說明實例銷毀 Vue -漸進式JavaScript框架 介紹 vue 中文網 vue github Vue.js 是一套構建用戶界面(UI)的漸進式JavaScript框架 庫和框架的區別 我們所說的前端框架與庫的區別? Library 庫,本質上是一...
摘要:指令綁定的前一個值,僅在和鉤子中可用。字符串形式的指令表達式。上一個虛擬節點在上可根據需要定義一些鉤子函數只調用一次,指令第一次綁定到元素時調用。指令的值可能發生了改變,也可能沒有。 前文 先來bb一堆廢話哈哈.. 用vue做項目也有一年多了.除了用別人的插件之外.自己也沒嘗試去封裝指令插件之類的東西來用. 剛好最近在項目中遇到一個問題.(快速點擊按鈕多次觸發多...
閱讀 1754·2021-09-22 15:25
閱讀 1316·2019-08-29 12:34
閱讀 1921·2019-08-26 13:57
閱讀 3198·2019-08-26 10:48
閱讀 1453·2019-08-26 10:45
閱讀 800·2019-08-23 18:23
閱讀 743·2019-08-23 18:01
閱讀 1953·2019-08-23 16:07