| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | Component({    properties: {        width: {            type: String        },        height: {            type: String        },        insertPicture: {            type: Boolean,            value: true        },        placeholder: {            type: String,            value: '输入文字...'        }    },    data: {        formats: {},        readOnly: false,        // editorHeight: 300,        keyboardHeight: 0,        isIOS: false    },    ready() {        const platform = wx.getSystemInfoSync().platform        const isIOS = platform === 'ios'        this.setData({            isIOS        })        const that = this        this.updatePosition(0)        let keyboardHeight = 0        wx.onKeyboardHeightChange(res => {            if (res.height === keyboardHeight) return            const duration = res.height > 0 ? res.duration * 1000 : 0            keyboardHeight = res.height            setTimeout(() => {                wx.pageScrollTo({                    scrollTop: 0,                    success() {                        that.updatePosition(keyboardHeight)                        that.editorCtx.scrollIntoView()                    }                })            }, duration)        })    },    methods: {        readOnlyChange() {            this.setData({                readOnly: !this.data.readOnly            })        },        updatePosition(keyboardHeight) {            const toolbarHeight = 100            const {                windowHeight,                platform            } = wx.getSystemInfoSync()                // let editorHeight = keyboardHeight > 0 ? (windowHeight - keyboardHeight - toolbarHeight) : windowHeight            this.setData({                // editorHeight,                keyboardHeight            })        },        calNavigationBarAndStatusBar() {            const systemInfo = wx.getSystemInfoSync()            const {                statusBarHeight,                platform            } = systemInfo            const isIOS = platform === 'ios'            const navigationBarHeight = isIOS ? 44 : 48            return statusBarHeight + navigationBarHeight        },        onEditorReady() {            const that = this                //组件使用createSelectorQuery加上in(this)            wx.createSelectorQuery().in(that).select('#editor').context(function(res) {                that.editorCtx = res.context            }).exec()        },        undo() {            this.editorCtx.undo()        },        redo() {            this.editorCtx.redo()        },        blur() {            this.editorCtx.blur()        },        format(e) {                          let { name, value } = e.target.dataset                if (!name) return                console.log('format', name, value)                this.editorCtx.format(name, value)        },        onStatusChange(e) {            const formats = e.detail            this.setData({                formats            })        },        insertDivider() {            this.editorCtx.insertDivider({                success: function() {                    console.log('insert divider success')                }            })        },        clear() {            this.editorCtx.clear({                success: function(res) {                    console.log("clear success")                }            })        },        removeFormat() {            this.editorCtx.removeFormat()        },        insertDate() {            const date = new Date()            const formatDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`            this.editorCtx.insertText({                text: formatDate            })        },        insertImage() {            this.triggerEvent('insertImage'); //触发父组件方法        },        insertSrc(src) { //接受图片返回地址            this.editorCtx.insertImage({                src,                data: {                    id: 'abcd',                    role: 'god'                },                width: '100%',                fail: (err) => {                    console.log(`图片插入失败:${err}`);                }            })        },        getContent(e) { //获得文本内容            this.triggerEvent('Content', {                content: e.detail            })        },        setHtml(html) { //回显            if (html) {                this.createSelectorQuery().select('#editor').context((res) => {                    this.editorCtx = res.context                    this.editorCtx.setContents({                        html,                        fail: (err) => {                            console.log(`内容回显失败:${err}`);                        }                    })                }).exec()            }        },    }})
 |