| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /**
- * @author 明浩
- * @time 2020-8-14
- * @dec 操作DOM 常用方法
- */
- import { trigger } from "./index.js";
- export function $(expr, con) {
- return typeof expr === "string"
- ? (con || document).querySelector(expr)
- : expr || null;
- }
- $.createElement = (tag, attrs) => {
- const elem = document.createElement(tag);
- for (let attr in attrs) {
- if (attr === "appendTo") {
- const parent = attrs.appendTo;
- parent.appendChild(elem);
- } else if (attr === "innerHTML") {
- elem.innerHTML = attrs.innerHTML;
- } else if (attr === "width" || attr === "height") {
- elem.style[attr] =
- String(attrs[attr]).indexOf("%") > -1
- ? attrs[attr]
- : attrs[attr] + "px";
- elem.setAttribute(attr, attrs[attr]);
- } else if (attr === "x") {
- elem.style.left = attrs[attr] + "px";
- elem.setAttribute(attr, attrs[attr]);
- } else if (attr === "y") {
- elem.style.top = attrs[attr] + "px";
- elem.setAttribute(attr, attrs[attr]);
- } else if (attr === "styles") {
- $.styles(elem, attrs[attr]);
- } else {
- elem.setAttribute(attr, attrs[attr]);
- }
- }
- return elem;
- };
- $.on = (element, event, selector, callback) => {
- if (!callback) {
- callback = selector;
- $.bind(element, event, callback);
- } else {
- $.delegate(element, event, selector, callback);
- }
- };
- $.off = (element, event, handler) => {
- element.removeEventListener(event, handler);
- };
- $.bind = (element, event, callback) => {
- event.split(/\s+/).forEach(function(event) {
- element.addEventListener(event, callback);
- });
- };
- $.delegate = (element, event, selector, callback) => {
- element.addEventListener(event, function(e) {
- const delegatedTarget = e.target.closest(selector);
- if (delegatedTarget) {
- e.delegatedTarget = delegatedTarget;
- callback.call(this, e, delegatedTarget);
- }
- });
- };
- $.closest = (selector, element) => {
- if (!element) return null;
- if (element.matches(selector)) {
- return element;
- }
- return $.closest(selector, element.parentNode);
- };
- if (!Element.prototype.matches) {
- Element.prototype.matches =
- Element.prototype.msMatchesSelector ||
- Element.prototype.webkitMatchesSelector;
- }
- if (!Element.prototype.closest) {
- Element.prototype.closest = function(s) {
- let el = this;
- if (!document.documentElement.contains(el)) return null;
- do {
- if (el.matches(s)) return el;
- el = el.parentElement || el.parentNode;
- } while (el !== null && el.nodeType === 1);
- return null;
- };
- }
- $.attr = (element, attr, value) => {
- if (!value && value !== 0 && typeof attr === "string") {
- return element.getAttribute(attr);
- }
- if (typeof attr === "object") {
- for (let key in attr) {
- $.attr(element, key, attr[key]);
- }
- return;
- }
- if (attr === "width" || attr === "height") {
- element.style[attr] =
- String(value).indexOf("%") > -1 ? value : value + "px";
- } else if (attr === "x") {
- element.style.left = value + "px";
- } else if (attr === "y") {
- element.style.top = value + "px";
- }
- element.setAttribute(attr, value);
- };
- $.styles = (element, css, value) => {
- if (!value && value !== 0 && typeof style === "string") {
- return element.style[css];
- }
- if (typeof css === "object") {
- for (let key in css) {
- $.styles(element, key, css[key]);
- }
- return;
- }
- if (typeof value === "number") {
- value += "px";
- }
- element.style[css] = value;
- };
- $.loadJs = (url, callback) => {
- var script = document.createElement("script");
- script.type = "text/javascript";
- if (typeof callback !== "undefined") {
- if (script.readyState) {
- script.onreadystatechange = function() {
- if (script.readyState == "loaded" || script.readyState == "complete") {
- script.onreadystatechange = null;
- callback();
- }
- };
- } else {
- script.onload = function() {
- callback();
- };
- }
- }
- script.src = url;
- document.body.appendChild(script);
- };
- $.trigger = (element, event) => {
- trigger(element, event);
- };
|