JavaScript ਵਿੱਚ ਸਕੇਲਿੰਗ ਦੇ ਨਾਲ ਡਰੈਗ ਅਤੇ ਡ੍ਰੌਪ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨਾ
ਇੱਕ ਨਿਰਵਿਘਨ ਅਤੇ ਜਵਾਬਦੇਹ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਅਨੁਭਵ ਬਣਾਉਣਾ ਚੁਣੌਤੀਪੂਰਨ ਹੋ ਸਕਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਸਕੇਲਿੰਗ ਵਰਗੀਆਂ ਤਬਦੀਲੀਆਂ ਸ਼ਾਮਲ ਹੁੰਦੀਆਂ ਹਨ। ਜੇ ਤੁਸੀਂ ਵਰਤ ਰਹੇ ਹੋ ਪਰਿਵਰਤਨ: ਅਨੁਵਾਦ () ਤੱਤ ਨੂੰ ਮੂਵ ਕਰਨ ਲਈ ਵਿਸ਼ੇਸ਼ਤਾ, ਤੱਤ ਵਿੱਚ ਇੱਕ ਪੈਮਾਨਾ ਜੋੜਨਾ ਇਸਦੇ ਆਕਾਰ ਅਤੇ ਸਥਿਤੀ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰੇਗਾ, ਜਿਸ ਨਾਲ ਗਣਨਾਵਾਂ ਟੁੱਟ ਜਾਣਗੀਆਂ।
ਇਸ ਦ੍ਰਿਸ਼ਟੀਕੋਣ ਵਿੱਚ, ਮਾਊਸ ਦੇ ਮੂਵਮੈਂਟ ਕੋਆਰਡੀਨੇਟਸ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਸਥਿਤੀ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਨਾ ਸੰਭਾਵਿਤ ਨਤੀਜਾ ਨਹੀਂ ਦੇਵੇਗਾ, ਕਿਉਂਕਿ ਸਕੇਲ ਕੀਤਾ ਗਿਆ ਤੱਤ ਹੁਣ ਇਸਦੇ ਅਸਲ ਆਕਾਰ 'ਤੇ ਨਹੀਂ ਚਲਦਾ ਹੈ। ਇਹ ਗਣਨਾ ਕਰਨ ਵੇਲੇ ਸਮੱਸਿਆਵਾਂ ਦਾ ਕਾਰਨ ਬਣਦਾ ਹੈ ਤੱਤ ਦੀ ਸਹੀ ਸਥਿਤੀ ਖਿੱਚਣ ਦੌਰਾਨ.
ਭਾਵੇਂ ਤੁਸੀਂ ਇੱਕ ਕਸਟਮ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਲਾਇਬ੍ਰੇਰੀ ਬਣਾ ਰਹੇ ਹੋ ਜਾਂ ਇਸ ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਆਪਣੇ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਜੋੜ ਰਹੇ ਹੋ, ਇਹ ਸਮਝਣਾ ਕਿ ਜਦੋਂ ਸਕੇਲਿੰਗ ਲਾਗੂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ ਸਥਿਤੀਆਂ ਦੀ ਸਹੀ ਗਣਨਾ ਕਿਵੇਂ ਕਰਨੀ ਹੈ। ਸਹੀ ਤੱਤ ਪਲੇਸਮੈਂਟ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਤੁਹਾਨੂੰ ਸਕੇਲ ਵੈਲਯੂ ਦੇ ਕਾਰਕ ਲਈ ਆਪਣੇ ਕੋਡ ਨੂੰ ਅਨੁਕੂਲ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।
ਇਹ ਲੇਖ ਸਮਝਾਏਗਾ ਕਿ ਡਰੈਗ ਕਰਦੇ ਹੋਏ, ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਕਿਸੇ ਤੱਤ ਦੀ ਸਹੀ ਸਥਿਤੀ ਦੀ ਗਣਨਾ ਕਿਵੇਂ ਕੀਤੀ ਜਾਵੇ ਅਨੁਵਾਦ ਕਰੋ JavaScript ਵਿੱਚ ਵਿਧੀ, ਲਾਗੂ ਸਕੇਲਿੰਗ ਦੇ ਨਾਲ। ਅਸੀਂ ਉਹਨਾਂ ਕਦਮਾਂ ਅਤੇ ਫਾਰਮੂਲਿਆਂ ਨੂੰ ਵੀ ਦੇਖਾਂਗੇ ਜਿਨ੍ਹਾਂ ਦੀ ਤੁਹਾਨੂੰ ਤੱਤ ਦੇ ਪੈਮਾਨੇ ਲਈ ਵਿਵਸਥਿਤ ਕਰਨ ਅਤੇ ਨਿਰਵਿਘਨ ਡਰੈਗ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਲੋੜ ਹੈ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
getBoundingClientRect() | ਇਹ ਵਿਧੀ ਵਿਊਪੋਰਟ ਦੇ ਅਨੁਸਾਰੀ ਇੱਕ ਤੱਤ ਦਾ ਆਕਾਰ ਅਤੇ ਸਥਿਤੀ ਵਾਪਸ ਕਰਦੀ ਹੈ। ਇਸਦੀ ਵਰਤੋਂ ਡਰੈਗਡ ਐਲੀਮੈਂਟ ਦੇ ਸਟੀਕ ਕੋਆਰਡੀਨੇਟਸ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਸਕੇਲ ਪਰਿਵਰਤਨ ਲਾਗੂ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। |
addEventListener('pointerdown') | ਇੱਕ ਤੱਤ ਨਾਲ ਇੱਕ ਖਾਸ ਇਵੈਂਟ ਹੈਂਡਲਰ ਨੱਥੀ ਕਰਦਾ ਹੈ। ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਇਹ ਪਤਾ ਲਗਾਉਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਕਿ ਉਪਭੋਗਤਾ ਐਲੀਮੈਂਟ ਨੂੰ ਕਲਿਕ ਜਾਂ ਛੂਹ ਕੇ ਡਰੈਗ ਕਦੋਂ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ। |
setProperty() | ਇਹ ਵਿਧੀ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ CSS ਵੇਰੀਏਬਲਾਂ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਉਦਾਹਰਨ ਵਿੱਚ, ਇਹ ਸਕੇਲ ਦੇ ਆਧਾਰ 'ਤੇ ਡਰੈਗ ਸਥਿਤੀ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਕਸਟਮ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ --x ਅਤੇ --y ਨੂੰ ਐਡਜਸਟ ਕਰਦਾ ਹੈ। |
removeEventListener() | ਇਹ ਵਿਧੀ ਉਹਨਾਂ ਇਵੈਂਟ ਸਰੋਤਿਆਂ ਨੂੰ ਹਟਾਉਂਦੀ ਹੈ ਜੋ ਪਹਿਲਾਂ ਸ਼ਾਮਲ ਕੀਤੇ ਗਏ ਸਨ। ਇਹ ਡਰੈਗ ਖਤਮ ਹੋਣ ਤੋਂ ਬਾਅਦ ਸਾਫ਼ ਕਰਨ, ਮੈਮੋਰੀ ਲੀਕ ਨੂੰ ਰੋਕਣ ਲਈ ਪੁਆਇੰਟਰਮੂਵ ਅਤੇ ਪੁਆਇੰਟਰਅਪ ਸੁਣਨ ਵਾਲਿਆਂ ਨੂੰ ਹਟਾਉਣ ਲਈ ਜ਼ਰੂਰੀ ਹੈ। |
clientX / clientY | ਇਹ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵਿਊਪੋਰਟ ਦੇ ਮੁਕਾਬਲੇ ਮਾਊਸ ਪੁਆਇੰਟਰ ਦੇ X ਅਤੇ Y ਕੋਆਰਡੀਨੇਟਸ ਨੂੰ ਵਾਪਸ ਕਰਦੀਆਂ ਹਨ। ਉਹ ਡਰੈਗ ਓਪਰੇਸ਼ਨ ਦੌਰਾਨ ਕਰਸਰ ਦੀ ਸਥਿਤੀ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹਨ। |
scale() | ਇਹ CSS ਟ੍ਰਾਂਸਫਾਰਮ ਫੰਕਸ਼ਨ ਦਾ ਹਿੱਸਾ ਹੈ। ਇਹ ਡਰੈਗ ਦੇ ਦੌਰਾਨ ਸਹੀ ਸਕੇਲਿੰਗ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ, ਟ੍ਰਾਂਸਲੇਟ ਵਰਗੀਆਂ ਹੋਰ ਟ੍ਰਾਂਸਫਾਰਮ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦੇ ਹੋਏ, ਖਿੱਚੇ ਗਏ ਤੱਤ ਦੇ ਆਕਾਰ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਂਦਾ ਹੈ। |
console.assert() | ਇਹ ਵਿਧੀ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ ਪ੍ਰਮਾਣਿਤ ਕਰਦਾ ਹੈ ਕਿ ਕੀ ਕੁਝ ਸ਼ਰਤਾਂ ਪੂਰੀਆਂ ਹੋਈਆਂ ਹਨ, ਜਿਵੇਂ ਕਿ ਜਾਂਚ ਕਰਨਾ ਕਿ ਕੀ ਸਕੇਲਿੰਗ ਨਾਲ ਡਰੈਗ ਇਵੈਂਟ ਤੋਂ ਬਾਅਦ ਅਨੁਵਾਦਿਤ ਸਥਿਤੀ ਦੀ ਸਹੀ ਗਣਨਾ ਕੀਤੀ ਗਈ ਹੈ। |
transform | ਇਹ CSS ਵਿਸ਼ੇਸ਼ਤਾ ਇੱਕ ਤੱਤ 'ਤੇ ਕਈ ਪਰਿਵਰਤਨ ਫੰਕਸ਼ਨਾਂ (ਜਿਵੇਂ ਅਨੁਵਾਦ ਅਤੇ ਸਕੇਲ) ਨੂੰ ਲਾਗੂ ਕਰਦੀ ਹੈ। ਇਹ ਡਰੈਗਿੰਗ ਅਤੇ ਸਕੇਲਿੰਗ ਦੌਰਾਨ ਤੱਤ ਦੀ ਵਿਜ਼ੂਅਲ ਸਥਿਤੀ ਅਤੇ ਆਕਾਰ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। |
ਅਨੁਵਾਦ ਅਤੇ ਸਕੇਲ ਨਾਲ ਐਲੀਮੈਂਟ ਪੋਜੀਸ਼ਨ ਨੂੰ ਕਿਵੇਂ ਹੈਂਡਲ ਕਰਨਾ ਹੈ ਨੂੰ ਸਮਝਣਾ
ਪੇਸ਼ ਕੀਤੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਦਾ ਉਦੇਸ਼ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਕਾਰਜਕੁਸ਼ਲਤਾ ਵਿੱਚ ਇੱਕ ਆਮ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕਰਨਾ ਹੈ ਜਦੋਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਅਨੁਵਾਦ ਕਰੋ JavaScript ਵਿੱਚ ਵਿਧੀ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਤੱਤ ਦਾ ਇੱਕ ਸਕੇਲਿੰਗ ਪਰਿਵਰਤਨ ਲਾਗੂ ਹੁੰਦਾ ਹੈ। ਪਹਿਲੀ ਸਕ੍ਰਿਪਟ ਉਪਭੋਗਤਾ ਦੇ ਡਰੈਗ ਇੰਟਰੈਕਸ਼ਨਾਂ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਪੁਆਇੰਟਰ ਇਵੈਂਟਾਂ ਨੂੰ ਸੁਣਦੀ ਹੈ। ਦੀ ਵਰਤੋਂ ਕਰਕੇ getBoundingClientRect() ਵਿਧੀ, ਇਹ ਸਕ੍ਰੀਨ 'ਤੇ ਤੱਤ ਦੀ ਸ਼ੁਰੂਆਤੀ ਸਥਿਤੀ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ। ਇਹ ਨਿਰਧਾਰਿਤ ਕਰਨ ਲਈ ਜ਼ਰੂਰੀ ਹੈ ਕਿ ਤੱਤ ਕਿੱਥੇ ਸਥਿਤ ਹੈ ਵਿਊਪੋਰਟ ਦੇ ਅਨੁਸਾਰ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਸਕੇਲ 1 ਨਹੀਂ ਹੈ, ਜਿਸ ਕਾਰਨ ਤੱਤ ਨੂੰ ਇਸਦੇ ਅਸਲ ਆਕਾਰ ਤੋਂ ਵੱਖਰਾ ਵਿਵਹਾਰ ਕਰਨਾ ਪੈਂਦਾ ਹੈ।
ਕੋਰ ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਦੇ ਅੰਦਰ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ dragElement ਫੰਕਸ਼ਨ, ਜੋ ਕਿ ਅੰਦੋਲਨ ਡੈਲਟਾ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ। ਡਰੈਗ ਮੋਸ਼ਨ ਪੁਆਇੰਟਰ ਦੀ ਗਤੀ ਨੂੰ ਸਕੇਲ ਫੈਕਟਰ ਦੁਆਰਾ ਵੰਡ ਕੇ ਐਡਜਸਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਤਾਂ ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾ ਸਕੇ ਕਿ ਦੂਰੀ ਸਹੀ ਢੰਗ ਨਾਲ ਮੈਪ ਕੀਤੀ ਗਈ ਹੈ ਭਾਵੇਂ ਤੱਤ ਨੂੰ ਵੱਡਾ ਕੀਤਾ ਜਾਂ ਸੁੰਗੜਿਆ ਹੋਵੇ। ਇਹ ਵਿਧੀ ਤੱਤ ਨੂੰ ਡਰੈਗ ਓਪਰੇਸ਼ਨਾਂ ਦੌਰਾਨ "ਜੰਪਿੰਗ" ਜਾਂ ਗਲਤ ਥਾਂ 'ਤੇ ਜਾਣ ਤੋਂ ਰੋਕਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ। ਸਕ੍ਰਿਪਟ ਫਿਰ ਟ੍ਰਾਂਸਫਾਰਮ ਪ੍ਰਾਪਰਟੀ ਦੁਆਰਾ ਇਹਨਾਂ ਐਡਜਸਟਮੈਂਟਾਂ ਨੂੰ ਲਾਗੂ ਕਰਦੀ ਹੈ, ਅਨੁਵਾਦ ਅਤੇ ਸਕੇਲ ਫੰਕਸ਼ਨਾਂ ਦੋਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੱਤ ਆਪਣੇ ਬਦਲੇ ਹੋਏ ਆਕਾਰ ਨੂੰ ਕਾਇਮ ਰੱਖਦੇ ਹੋਏ ਤਰਲ ਢੰਗ ਨਾਲ ਚਲਦਾ ਹੈ।
ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਸੰਬੋਧਿਤ ਇੱਕ ਵਾਧੂ ਚੁਣੌਤੀ ਇਹ ਯਕੀਨੀ ਬਣਾ ਰਹੀ ਹੈ ਕਿ ਡਰੈਗ ਇਵੈਂਟ ਨੂੰ ਠੀਕ ਤਰ੍ਹਾਂ ਸਾਫ਼ ਕੀਤਾ ਗਿਆ ਹੈ। ਡਰੈਗ ਐਕਸ਼ਨ ਪੂਰਾ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਇਵੈਂਟ ਸਰੋਤਿਆਂ ਨੂੰ ਵਰਤ ਕੇ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ EventListener ਨੂੰ ਹਟਾਓ ਮੈਮੋਰੀ ਲੀਕ ਅਤੇ ਅਣਇੱਛਤ ਵਿਵਹਾਰ ਤੋਂ ਬਚਣ ਲਈ। ਇਹ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਸਕ੍ਰਿਪਟ ਸਿਰਫ ਲੋੜ ਪੈਣ 'ਤੇ ਜਵਾਬ ਦਿੰਦੀ ਹੈ, ਬਿਹਤਰ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਉਪਯੋਗਤਾ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਦੀ ਵਰਤੋਂ ਸੈੱਟਪ੍ਰਾਪਰਟੀ() ਵਿਧੀ CSS ਵੇਰੀਏਬਲਾਂ ਵਿੱਚ ਗਤੀਸ਼ੀਲ ਸਮਾਯੋਜਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ, ਇਸ ਵਿੱਚ ਲਚਕਤਾ ਨੂੰ ਵਧਾਉਂਦੀ ਹੈ ਕਿ ਕਿਵੇਂ ਡਰੈਗ ਇੰਟਰੈਕਸ਼ਨਾਂ ਨੂੰ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਹਾਰਡਕੋਡਿੰਗ ਮੁੱਲਾਂ ਤੋਂ ਬਿਨਾਂ ਸਟਾਈਲ ਜਾਂ ਅਨੁਕੂਲਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
ਵਿਕਲਪਕ ਹੱਲ ਵਿੱਚ, ਨਾਲ ਯੂਨਿਟ ਟੈਸਟਾਂ ਦੀ ਵਰਤੋਂ console.asssert() ਲਾਗੂ ਕਰਨ ਲਈ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਇੱਕ ਵਾਧੂ ਪਰਤ ਜੋੜਦਾ ਹੈ। ਇਹ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਕਿ ਗਣਨਾਵਾਂ ਉਮੀਦ ਅਨੁਸਾਰ ਕੰਮ ਕਰ ਰਹੀਆਂ ਹਨ, ਖਾਸ ਕਰਕੇ ਸਕੇਲ ਕੀਤੇ ਵਾਤਾਵਰਨ ਵਿੱਚ। ਪੂਰਵ-ਪ੍ਰਭਾਸ਼ਿਤ ਸਥਿਤੀਆਂ ਦੇ ਵਿਰੁੱਧ ਡਰੈਗ ਓਪਰੇਸ਼ਨ ਦੇ ਨਤੀਜੇ ਦੀ ਜਾਂਚ ਕਰਕੇ, ਸਕ੍ਰਿਪਟ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਕਿ ਇਹ ਗੈਰ-ਯੂਨੀਫਾਰਮ ਸਕੇਲਿੰਗ ਜਾਂ ਵੱਖ-ਵੱਖ ਪ੍ਰੀਸੈੱਟ ਆਫਸੈਟਾਂ ਵਰਗੇ ਕਿਨਾਰਿਆਂ ਦੇ ਮਾਮਲਿਆਂ ਨੂੰ ਸੰਭਾਲਦੀ ਹੈ। ਇਹ ਪਹੁੰਚ ਨਾ ਸਿਰਫ਼ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਕਾਰਜਕੁਸ਼ਲਤਾ ਦੀ ਮਜ਼ਬੂਤੀ ਨੂੰ ਸੁਧਾਰਦੀ ਹੈ ਬਲਕਿ ਕੋਡ ਨੂੰ ਹੋਰ ਮਾਡਿਊਲਰ ਅਤੇ ਵੱਖ-ਵੱਖ ਸੰਦਰਭਾਂ ਵਿੱਚ ਮੁੜ ਵਰਤੋਂ ਯੋਗ ਵੀ ਬਣਾਉਂਦੀ ਹੈ।
JavaScript ਨਾਲ ਡਰੈਗ ਅਤੇ ਸਕੇਲ ਦੌਰਾਨ ਐਲੀਮੈਂਟ ਪੋਜੀਸ਼ਨ ਨੂੰ ਸੰਭਾਲਣਾ
ਇਹ ਹੱਲ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਹੈਂਡਲਿੰਗ ਲਈ ਸ਼ੁੱਧ JavaScript ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਪਰਿਵਰਤਨ ਅਤੇ ਅਨੁਵਾਦ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਤੱਤ ਨੂੰ ਸਕੇਲ ਕਰਦੇ ਹੋਏ ਸਥਿਤੀਆਂ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ।
let startX, startY, initialX, initialY, scale = 1;
const draggable = document.getElementById('draggable');
draggable.addEventListener('pointerdown', startDrag);
function startDrag(e) {
startX = e.clientX;
startY = e.clientY;
const rect = draggable.getBoundingClientRect();
initialX = rect.left;
initialY = rect.top;
document.addEventListener('pointermove', dragElement);
document.addEventListener('pointerup', stopDrag);
}
function dragElement(e) {
const deltaX = (e.clientX - startX) / scale;
const deltaY = (e.clientY - startY) / scale;
draggable.style.transform = `translate(${initialX + deltaX}px, ${initialY + deltaY}px) scale(${scale})`;
}
function stopDrag() {
document.removeEventListener('pointermove', dragElement);
document.removeEventListener('pointerup', stopDrag);
}
ਐਲੀਮੈਂਟ ਸਕੇਲਿੰਗ ਲਈ CSS ਅਤੇ JavaScript ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਵਿਕਲਪਕ ਹੱਲ
ਇਹ ਵਿਕਲਪਿਕ ਪਹੁੰਚ ਇੱਕ ਐਲੀਮੈਂਟ ਦੀ ਸਥਿਤੀ ਨੂੰ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਵਿਵਸਥਿਤ ਕਰਨ ਲਈ JavaScript ਦੇ ਨਾਲ CSS ਵੇਰੀਏਬਲ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ ਜਦੋਂ ਇਹ ਸਕੇਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
let startX, startY, initialX, initialY, scale = 1;
const draggable = document.getElementById('draggable');
draggable.addEventListener('pointerdown', startDrag);
function startDrag(e) {
startX = e.clientX;
startY = e.clientY;
const rect = draggable.getBoundingClientRect();
initialX = rect.left / scale;
initialY = rect.top / scale;
document.addEventListener('pointermove', dragElement);
document.addEventListener('pointerup', stopDrag);
}
function dragElement(e) {
const deltaX = (e.clientX - startX) / scale;
const deltaY = (e.clientY - startY) / scale;
draggable.style.setProperty('--x', initialX + deltaX + 'px');
draggable.style.setProperty('--y', initialY + deltaY + 'px');
}
function stopDrag() {
document.removeEventListener('pointermove', dragElement);
document.removeEventListener('pointerup', stopDrag);
}
ਡਰੈਗ ਅਤੇ ਸਕੇਲ ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟ
ਇਹ ਸੈਕਸ਼ਨ ਇਹ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ JavaScript ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਯੂਨਿਟ ਟੈਸਟ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਕਿ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਕਾਰਜਕੁਸ਼ਲਤਾ ਸਕੇਲ ਕੀਤੇ ਤੱਤਾਂ ਨਾਲ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਦੀ ਹੈ।
function testDragWithScale() {
const element = document.createElement('div');
element.style.width = '100px';
element.style.height = '100px';
element.style.transform = 'scale(2)';
document.body.appendChild(element);
startDrag({clientX: 100, clientY: 100});
dragElement({clientX: 200, clientY: 200});
const computedTransform = getComputedStyle(element).transform;
console.assert(computedTransform.includes('translate(50px, 50px)'), 'Position adjusted correctly with scale');
}
testDragWithScale();
ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਫੰਕਸ਼ਨੈਲਿਟੀ ਵਿੱਚ ਐਲੀਮੈਂਟ ਸਕੇਲਿੰਗ ਨੂੰ ਸੰਭਾਲਣਾ
ਜਦੋਂ ਇੱਕ ਮਜਬੂਤ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਇੰਟਰਫੇਸ ਨੂੰ ਵਿਕਸਤ ਕਰਨ ਦੀ ਗੱਲ ਆਉਂਦੀ ਹੈ, ਤਾਂ ਇਹ ਸਮਝਣਾ ਕਿ ਸਕੇਲਿੰਗ ਵਰਗੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਣਾ ਹੈ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਆਮ ਤੌਰ 'ਤੇ, ਜਦੋਂ ਇੱਕ ਤੱਤ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਖਿੱਚਿਆ ਜਾਂਦਾ ਹੈ ਅਨੁਵਾਦ ਕਰੋ JavaScript ਵਿੱਚ ਫੰਕਸ਼ਨ, ਇਸ ਨੂੰ ਮਾਊਸ ਦੇ ਕੋਆਰਡੀਨੇਟਸ ਦੇ ਆਧਾਰ 'ਤੇ ਮੂਵ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਜਦੋਂ ਤੱਤ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਕੇਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਪਰਿਵਰਤਨ: ਸਕੇਲ() ਸੰਪੱਤੀ, ਇਸਦਾ ਆਕਾਰ ਅਤੇ ਗਤੀ ਮੂਲ ਮਾਪਾਂ ਦੇ ਮੁਕਾਬਲੇ ਬਦਲਦੀ ਹੈ। ਸਹੀ ਸਥਿਤੀ ਦੀ ਗਣਨਾ ਕਰਨ ਦੀ ਕੁੰਜੀ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਹੈ ਕਿ ਸਥਿਤੀ ਨੂੰ ਸਕੇਲਿੰਗ ਫੈਕਟਰ ਲਈ ਐਡਜਸਟ ਕੀਤਾ ਗਿਆ ਹੈ। ਪੈਮਾਨੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰਨ ਨਾਲ ਗਲਤ ਸਥਿਤੀ ਅਤੇ ਅਨਿਯਮਿਤ ਵਿਵਹਾਰ ਹੋਵੇਗਾ।
ਸਕੇਲਿੰਗ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸੰਭਾਲਣ ਲਈ, ਤੁਹਾਨੂੰ ਤੱਤ ਦੀ ਦੂਰੀ ਨੂੰ ਸਕੇਲ ਮੁੱਲ ਦੁਆਰਾ ਵੰਡਣ ਦੀ ਲੋੜ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੱਤ ਕਰਸਰ ਦੇ ਨਾਲ ਅਨੁਪਾਤੀ ਤੌਰ 'ਤੇ ਚਲਦਾ ਹੈ, ਭਾਵੇਂ ਇਸਦਾ ਆਕਾਰ ਵਧਾਇਆ ਜਾਂ ਘਟਾਇਆ ਜਾਵੇ। ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ getBoundingClientRect() ਤੁਹਾਨੂੰ ਤੱਤ ਦੇ ਮੌਜੂਦਾ ਮਾਪਾਂ ਨੂੰ ਮਾਪਣ ਅਤੇ ਵਿਊਪੋਰਟ ਦੀ ਸਥਿਤੀ ਦੇ ਆਧਾਰ 'ਤੇ ਆਫਸੈਟਾਂ ਦੀ ਗਣਨਾ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਇਹ ਔਫਸੈੱਟ ਤੱਤ ਦੀ ਸਥਿਤੀ ਨੂੰ ਸਟੀਕ ਤੌਰ 'ਤੇ ਖਿੱਚਣ ਵੇਲੇ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦੇ ਹਨ। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਪੈਮਾਨੇ ਦੇ ਹਿਸਾਬ ਨਾਲ ਮੂਵਮੈਂਟ ਡੈਲਟਾ ਨੂੰ ਐਡਜਸਟ ਕਰਕੇ, ਤੁਸੀਂ ਕਰਸਰ ਦੇ ਮੁਕਾਬਲੇ ਤੱਤ ਦੇ ਬਹੁਤ ਤੇਜ਼ ਜਾਂ ਹੌਲੀ ਚੱਲਣ ਵਰਗੀਆਂ ਸਮੱਸਿਆਵਾਂ ਤੋਂ ਬਚਦੇ ਹੋ।
ਇਸ ਤੋਂ ਇਲਾਵਾ, ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਮਾਡਿਊਲਰਾਈਜ਼ ਕਰਨਾ ਵੱਖ-ਵੱਖ ਸੰਦਰਭਾਂ ਵਿੱਚ ਮੁੜ ਵਰਤੋਂਯੋਗਤਾ ਲਈ ਸਹਾਇਕ ਹੈ। ਇਸ ਮਾਡਯੂਲਰ ਪਹੁੰਚ ਨੂੰ ਕਈ ਤੱਤਾਂ, ਵੱਖ-ਵੱਖ ਸਕੇਲਾਂ, ਅਤੇ ਇੱਥੋਂ ਤੱਕ ਕਿ ਉਪਭੋਗਤਾ ਦੁਆਰਾ ਪਰਿਭਾਸ਼ਿਤ ਆਫਸੈਟਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਵਧਾਇਆ ਜਾ ਸਕਦਾ ਹੈ। ਇਵੈਂਟ ਸਰੋਤਿਆਂ ਦੀ ਵਰਤੋਂ ਪਸੰਦ ਹੈ AddEventListener() ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਡਰੈਗ ਵਿਵਹਾਰ ਵੱਖ-ਵੱਖ ਇਨਪੁਟ ਕਿਸਮਾਂ, ਜਿਵੇਂ ਕਿ ਮਾਊਸ, ਟੱਚ, ਜਾਂ ਪੈੱਨ ਵਿੱਚ ਇਕਸਾਰ ਹੈ। ਸਟੀਕਤਾ ਨਾਲ ਸਕੇਲਿੰਗ ਅਤੇ ਪੋਜੀਸ਼ਨਿੰਗ ਦੋਵਾਂ ਨੂੰ ਸੰਭਾਲਣ ਦੁਆਰਾ, ਤੁਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋ ਕਿ ਤੁਹਾਡਾ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਇੰਟਰਫੇਸ ਅਨੁਭਵੀ ਅਤੇ ਨਿਰਵਿਘਨ ਬਣਿਆ ਰਹੇ, ਭਾਵੇਂ ਤੱਤ ਨੂੰ ਕਿਵੇਂ ਬਦਲਿਆ ਗਿਆ ਹੋਵੇ।
ਸਕੇਲਿੰਗ ਅਤੇ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ 'ਤੇ ਆਮ ਸਵਾਲ
- ਸਕੇਲਿੰਗ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਪੋਜੀਸ਼ਨਿੰਗ ਨੂੰ ਕਿਵੇਂ ਪ੍ਰਭਾਵਿਤ ਕਰਦੀ ਹੈ?
- ਸਕੇਲਿੰਗ ਤੱਤ ਦੇ ਆਕਾਰ ਨੂੰ ਬਦਲਦੀ ਹੈ, ਇਸ ਲਈ ਸਹੀ ਸਥਿਤੀ ਬਣਾਈ ਰੱਖਣ ਲਈ, ਤੁਹਾਨੂੰ ਪੈਮਾਨੇ ਦੇ ਕਾਰਕ ਦੁਆਰਾ ਅਨੁਵਾਦ ਨੂੰ ਵੰਡ ਕੇ ਅੰਦੋਲਨ ਨੂੰ ਅਨੁਕੂਲ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੱਤ ਕਰਸਰ ਦੇ ਨਾਲ ਸਹੀ ਢੰਗ ਨਾਲ ਚਲਦਾ ਹੈ।
- ਕੀ ਰੋਲ ਕਰਦਾ ਹੈ getBoundingClientRect() ਇਸ ਵਿੱਚ ਖੇਡੋ?
- getBoundingClientRect() ਵਿਊਪੋਰਟ ਦੇ ਅਨੁਸਾਰੀ ਤੱਤ ਦੇ ਮੌਜੂਦਾ ਮਾਪ ਅਤੇ ਸਥਿਤੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਸਹੀ ਗਤੀ ਅਤੇ ਆਫਸੈਟਾਂ ਦੀ ਗਣਨਾ ਕਰਨ ਵਿੱਚ ਤੁਹਾਡੀ ਮਦਦ ਕਰਦਾ ਹੈ।
- ਇੱਕ ਤੱਤ ਨੂੰ ਖਿੱਚਣ ਵੇਲੇ ਮੈਂ ਵੱਖ-ਵੱਖ ਸਕੇਲ ਮੁੱਲਾਂ ਲਈ ਕਿਵੇਂ ਖਾਤਾ ਬਣਾ ਸਕਦਾ ਹਾਂ?
- ਪੈਮਾਨੇ ਦੁਆਰਾ ਅੰਦੋਲਨ ਦੀ ਦੂਰੀ ਨੂੰ ਵੰਡ ਕੇ, ਤੁਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾ ਸਕਦੇ ਹੋ ਕਿ ਤੱਤ ਦੀ ਗਤੀ ਇਸਦੇ ਆਕਾਰ ਦੇ ਅਨੁਪਾਤੀ ਰਹੇ। ਤੁਸੀਂ ਵੀ ਵਰਤ ਸਕਦੇ ਹੋ setProperty() ਸਕੇਲ ਮੁੱਲ ਦੇ ਆਧਾਰ 'ਤੇ CSS ਵੇਰੀਏਬਲ ਨੂੰ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਅੱਪਡੇਟ ਕਰਨ ਲਈ।
- ਕੀ ਮੈਂ ਇਸ ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਹੋਰ ਤੱਤਾਂ ਲਈ ਦੁਬਾਰਾ ਵਰਤ ਸਕਦਾ ਹਾਂ?
- ਹਾਂ, ਮਾਡਿਊਲਰ ਕੋਡ ਲਿਖ ਕੇ ਅਤੇ ਮੁੜ ਵਰਤੋਂ ਯੋਗ ਫੰਕਸ਼ਨਾਂ ਵਿੱਚ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਤਰਕ ਨੂੰ ਸ਼ਾਮਲ ਕਰਕੇ, ਤੁਸੀਂ ਉਹਨਾਂ ਦੇ ਪੈਮਾਨੇ ਜਾਂ ਪਰਿਵਰਤਨ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਇੱਕ ਤੋਂ ਵੱਧ ਤੱਤਾਂ ਲਈ ਇੱਕੋ ਕਾਰਜਸ਼ੀਲਤਾ ਨੂੰ ਲਾਗੂ ਕਰ ਸਕਦੇ ਹੋ।
- ਮੈਨੂੰ ਕਿਉਂ ਵਰਤਣਾ ਚਾਹੀਦਾ ਹੈ removeEventListener() ਡਰੈਗਿੰਗ ਖਤਮ ਹੋਣ ਤੋਂ ਬਾਅਦ?
- ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ removeEventListener() ਮੈਮੋਰੀ ਲੀਕ ਨੂੰ ਰੋਕਦਾ ਹੈ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਜਦੋਂ ਉਪਭੋਗਤਾ ਐਲੀਮੈਂਟ ਜਾਰੀ ਕਰਦਾ ਹੈ ਤਾਂ ਡਰੈਗ ਐਕਸ਼ਨ ਰੁਕ ਜਾਂਦਾ ਹੈ। ਇਹ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇਵੈਂਟ ਸੁਣਨ ਵਾਲੇ ਬੇਲੋੜੇ ਸਰਗਰਮ ਨਹੀਂ ਹਨ।
ਸਕੇਲਿੰਗ ਨਾਲ ਡਰੈਗ ਦੇ ਪ੍ਰਬੰਧਨ 'ਤੇ ਅੰਤਿਮ ਵਿਚਾਰ
ਉਹਨਾਂ ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਜਿੱਥੇ ਘਸੀਟਣ ਯੋਗ ਤੱਤਾਂ ਨੂੰ ਸਕੇਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਸਹੀ ਸਥਿਤੀ ਦੀ ਗਣਨਾ ਕਰਨਾ ਗੁੰਝਲਦਾਰ ਹੋ ਜਾਂਦਾ ਹੈ। ਪੈਮਾਨੇ ਅਤੇ ਸ਼ੁਰੂਆਤੀ ਸਥਿਤੀ ਦੋਵਾਂ ਲਈ ਅਡਜੱਸਟ ਕਰਨ ਲਈ ਸਟੀਕ ਗਤੀ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ, ਪੈਮਾਨੇ ਦੇ ਕਾਰਕ ਦੁਆਰਾ ਅੰਦੋਲਨ ਨਿਰਦੇਸ਼ਾਂਕ ਨੂੰ ਵੰਡਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
ਗਤੀਸ਼ੀਲ ਢੰਗਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਕੇ ਜਿਵੇਂ ਕਿ ਕੋਆਰਡੀਨੇਟਸ ਨੂੰ ਐਡਜਸਟ ਕਰਨਾ ਅਤੇ ਬਾਊਂਡਿੰਗ ਆਇਤਕਾਰ ਗਣਨਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਤੁਸੀਂ ਇੱਕ ਸਹਿਜ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਅਨੁਭਵ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ। ਵੱਖ-ਵੱਖ ਪੈਮਾਨਿਆਂ ਦੇ ਮੁੱਲਾਂ ਵਿੱਚ ਇਸ ਪਹੁੰਚ ਨੂੰ ਲਾਗੂ ਕਰਨਾ ਨਿਰਵਿਘਨ ਪਰਸਪਰ ਪ੍ਰਭਾਵ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਅਤੇ ਉਪਭੋਗਤਾ ਇੰਟਰਫੇਸ ਦੀ ਇਕਸਾਰਤਾ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦਾ ਹੈ।
ਸਕੇਲਿੰਗ ਦੇ ਨਾਲ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਲਈ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਇਸ ਲੇਖ ਦੀ ਸਮੱਗਰੀ ਇੱਕ JavaScript ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਲਾਇਬ੍ਰੇਰੀ 'ਤੇ ਅਧਾਰਤ ਹੈ ਜੋ ਅਨੁਵਾਦ ਕਰੋ ਫੰਕਸ਼ਨ ਅਤੇ ਸਕੇਲ ਸੰਪਤੀ. ਵਿਹਾਰਕ ਲਾਗੂ ਕਰਨ ਲਈ, 'ਤੇ ਉਪਲਬਧ ਕੋਡ ਉਦਾਹਰਨ ਵੇਖੋ ਕੋਡਸੈਂਡਬਾਕਸ .
- ਮੋਜ਼ੀਲਾ ਦੇ ਡਿਵੈਲਪਰ ਨੈੱਟਵਰਕ (MDN) ਦਸਤਾਵੇਜ਼ਾਂ ਤੋਂ ਵਾਧੂ ਡਰੈਗ-ਐਂਡ-ਡ੍ਰੌਪ ਕਾਰਜਕੁਸ਼ਲਤਾ ਅਤੇ ਇਵੈਂਟ ਹੈਂਡਲਿੰਗ ਦਾ ਹਵਾਲਾ ਦਿੱਤਾ ਗਿਆ ਸੀ। ਬਾਰੇ ਹੋਰ ਵੇਰਵੇ getBoundingClientRect() ਇੱਥੇ ਪਾਇਆ ਜਾ ਸਕਦਾ ਹੈ.
- JavaScript ਵਿੱਚ ਉੱਨਤ ਸਕੇਲਿੰਗ ਅਤੇ ਪਰਿਵਰਤਨ ਤਕਨੀਕਾਂ ਨੂੰ ਬਿਹਤਰ ਢੰਗ ਨਾਲ ਸਮਝਣ ਲਈ, ਇਸ ਟਿਊਟੋਰਿਅਲ ਨੂੰ ਦੇਖੋ CSS ਪਰਿਵਰਤਨ W3Schools ਦੁਆਰਾ ਪ੍ਰਦਾਨ ਕੀਤਾ ਗਿਆ।